lOMoARcPSD| 45470709
lOMoARcPSD| 45470709
2
I. CAESAR 1.Giới thiệu mật mã Caesar
Mã hóa Caesar là một trong những kỹ thuật mã hóa cổ điển đơn giản nhất và nổi ếng
nhất trong lịch sử mật mã học. Phương pháp này được đặt theo tên của Julius Caesar – người
đã sử dụng nó để gửi các thông điệp bí mật. Cơ chế hoạt động dựa trên việc dịch chuyển các
ký tự trong bản rõ một số vị trí nhất định trong bảng chữ cái.
Nguyên lý hoạt động
Mỗi ký tự trong văn bản gốc được thay thế bằng ký tự cách nó một số vị trí trong bảng
chcái (theo chiều ến). Số vị trí dịch chuyển này chính khóa của thuật toán. dụ, với
khóa = 3, chA sẽ trở thành D, B trở thành E, v.v. Sau khi đến chZ, việc dịch chuyển sẽ quay
vòng lại chữ A.
Ví dụ:
Văn bản gốc: HELLO
Khóa: 3
Văn bản mã hóa: KHOOR
2. Tạo khóa
Kiểu dữ liệu: int
Mục đích: Dịch chuyển các ký tự theo số ớc xác định Yêu cầu:
o Là số nguyên từ 1 đến 25 (vì dịch 26 bước sẽ quay lại ký tự ban đầu)
o Không dùng ký tự đặc biệt, âm hoặc vượt ngoài phạm vi bảng chữ cái
3. Mã hóa
3.1 Kiểu dữ liệu đầu vào
Văn bản cần mã hóa o Kiu
dữ liệu: String o Yêu cầu:
Chỉ bao gồm chữ cái (A–Z hoặc a–z)
Không dấu, không khoảng trắng, không ký tự đặc biệt
Có thể chuyển sang chữ in hoa để dễ xử lý
3.2 Kiểu dữ liệu đầu ra
Văn bản đã mã hóa
o Kiểu dữ liệu: String o
tả:
Chuỗi gồm các ký tự đã được dịch chuyển theo khóa
Ginguyên độ dài
lOMoARcPSD| 45470709
3
Không chứa khoảng trắng, không dấu
3.3 Lưu đồ thuật toán
(Lưu đồ có thể vẽ gồm các bước: Nhập n bản Lặp qua từng tự Dịch chuyển tự
theo khóa → Nối lại thành chuỗi mã hóa → Xuất kết quả)
III. PLAYFAIR
1. Giới thiệu mật mã Playfair
Mật mã Playfair là một phương pháp mã hóa trong lĩnh vực mật mã học. Nó được sử
dụng để mã hóa thông điệp bằng cách thay thế các cặp ký tự trong văn bản gốc bằng các cặp
tự trong một bảng 5x5 được tạo ra từ một khóa. Dưới đây là một số lý thuyết về mật
Playfair
* Tạo bảng
Bảng Playfair một ma trận 5x5 được tạo ra từ một khóa. Các chữ cái trong khóa
được sắp xếp không trùng lặp sau đó được điền vào các ô của bảng. Các ô trống còn lại
được điền bởi các chữ còn lại, loại bỏ “J” thay thế nó bằng “I”
Ví dụ về bảng playfair: key =MINH
* Xác định cặp kí tự
Văn bản cần hóa được chia thành các cặp tự . nếu có 2 tự giống nhau trong
cùng một cặp, thì thêm một kí tự “X” vào giữa chúng.
Nếu độ dài văn bản là số lẻ, thêm một kí tự “X” vào cuối bản rõ
* Ưu điểm và nhược điểm
Ưu điểm: Mật mã Playfair thường được coi là mạnh mẽ trong thời kỳ nó được sử
dụng, đặc biệt là so với một số phương pháp mật mã đơn giản khác
Nhược điểm: Mặc dù mật mã Playfair có ưu điểm về độ an toàn so với mật mã Caesar
và một số phương pháp khác, nhưng nó không được sử dụng nhiều trong thời đại hiện đại vì
nó không đủmạnh mẽ đối với các kỹ thuật mã hóa hiện đại
Mật Playfair thường được sử dụng trong quân sgiao ếp mật trong quá
khứ, nhưng hiện nay đã được thay thế bởi các thuật toán hóa mạnh mẽ hiện đại
hơn
2. Tạo khoá
lOMoARcPSD| 45470709
4
Kiểu dữ liu: String
Mục đích: Dùng để tạo ma trận 5x5 ký tự (Playfair Matrix) Yêu cầu:
o Chchứa chữ cái (A–Z hoặc a–z) o Không có dấu, không chứa số hoc
ký tự đặc biệt o Thường loại bỏ chữ 'J' (gộp I và J lại làm một) o Có thể
chuyển về chữ in hoa hết (để đơn giản hóa xử lý) o Không lặp ký tự
* Tạo khoá ma trận 5 x 5
Chức năng: To ma trận khóa 5x5 dùng trong thuật toán Playfair từ chuỗi khóa người
dùng nhập
Loại bỏ ký tự trùng lặp
Thay 'J' bằng 'I'
Bổ sung các ký tự còn thiếu trong bảng chữ cái A–Z (trừ 'J')
Sắp xếp các ký tự vào ma trận 5x5 Tham số đầu vào:
Tên biến: tFKhoa.getText()
Kiểu dữ liệu: String
tả: Chuỗi khóa được nhập từ một ô nhập liệu giao diện (text eld), được chuyển
sang chữ in hoa bằng .toUpperCase() Giá trị trả v:
Tên biến: Khoa2Chieu
Kiểu dữ liệu: char[] []
tả: Ma trận 5x5 ký tự khóa được tạo theo quy tắc của Playfair (loại bỏ trùng, không
có 'J', chứa đủ 25 ký tự)
lOMoARcPSD| 45470709
5
3. Mã hoá
Trường hợp 1 (Cùng hàng): nếu một cặp tự nằm trên cùng một hàng thì thay thế
mỗi kí tự bằng kí tự bên phải nó. Nếu nằm ở cột cuối cùng thì quay về ô đầu ên của cột đó
Trường hợp 2 (Cùng cột): nếu cặp tự cùng nằm trên một cột, thì thay thế mỗi tự
bằng kí tự bên dưới nó. Nếu nằm ở hàng cuối cùng thì quay về ô đầu ên của cột đó
Trường hợp 3 (Khác hàng cột): Tạo thành hình chữ nhật với hai kí tự thay thế mỗi
kí tự bằng góc đối diện của hình chữ nhật
3.1. Kiểu dữ liệu đầu vào
lOMoARcPSD| 45470709
6
* Văn bản cần mã hoá
Kiểu dữ liu: string
Mục đích: Là đầu vào cần được mã hóa Yêu
cầu:
o Chchứa chữ cái o Không dấu, không số, không ký tự đặc biệt.
o Nếu có cặp ký tự trùng nhau trong một cặp (ví dụ: “meet “me et” → “me
ex et”), cần chèn thêm ký tự đệm như 'X'.
o Nếu số ký tự là lẻ, thêm 'X' vào cuối để đủ cặp.
3.2. Kiểu dữ liệu đầu ra
* Văn bản đã được mã hoá
Kiểu dữ liu: string Mô tả: o Là chuỗi ký tự đã được mã
hóa từ văn bản gốc.
o Chỉ gồm chữ cái in hoa (A–Z), không có dấu, khoảng trắng hay ký tự đặc biệt.
o Độ dài là số chẵn, vì văn bản gốc được chia thành các cặp tự o thể chứa
tự đệm (ví dụ 'X') được chèn thêm trong quá trình mã hóa để:
Tránh cặp ký tự trùng nhau (ví dụ: "LL" → "LX LX")
Đảm bảo độ dài chẵn
lOMoARcPSD| 45470709
7
3.3. Lưu đồ thuật toán
lOMoARcPSD| 45470709
8
3.4. Code chương trình mã hoá
4. Giải mã
Trường hợp 1 (Cùng Hàng) : nếu một cặp tự nằm trên cùng một hàng thì thay thế
mỗi kí tự bằng kí tự bên trái nó. Nếu nằm ở cột cuối cùng thì quay về ô đầu ên của cột đó
Trường hợp 2 (Cùng cột) : nếu cặp kí tự cùng nằm trên một cột, thì thay thế mỗi kí tự
bằng kí tự bên trên nó. Nếu nằm ở hàng cuối cùng thì quay về ô đầu ên của cột đó
Trường hợp 3 (Khác hàng cột): Tạo thành hình chữ nhật với hai kí tự thay thế mỗi
kí tự bằng góc đối diện của hình chữ nhật
4.1. Kiểu dữ liệu đầu vào
* Văn bản cần giải mã
Kiểu dữ liu: string
Mục đích: Là đầu vào cần được giải mã Yêu cầu:
Chỉ gồm chữ cái (không dấu, không khoảng trắng, không ký tự đặc biệt).
Độ dài là số chẵn, chia được thành các cặp ký tự.
Nếu tự chèn (ví dụ 'X'), cần xử khi hậu giải (tùy quy tắc hóa ban
đầu).
4.2. Kiểu dữ liệu đầu ra
lOMoARcPSD| 45470709
9
* Văn bản cần được giải mã
Kiểu dữ liu: string Mô tả: o Là chuỗi ký tự đã được giải
mã từ ciphertext.
o Chỉ gồm chữ cái in hoa (A–Z), không có dấu, khoảng trắng hay ký tự đặc biệt.
o Có thể vẫn chứa ký tự đệm (ví dụ 'X') nếu không loại bỏ sau giải mã.
o Người dùng có thcần hậu xđể loại bỏ tự chèn khôi phục văn bản gốc
chính xác.
4.3. Lưu đồ thuật toán
lOMoARcPSD| 45470709
10
lOMoARcPSD| 45470709
11
4.4. Code chương trình giải mã
5. Các hàm bổ sung
* Hàm tách chuỗi thành từng cặp kí tự
Chức năng: Tiền xử lý chuỗi trước khi mã hóa bằng cách chia chuỗi thành các cặp ký tự,
đồng thời:
Chèn ký tự 'X' nếu hai ký tự giống nhau đứng cạnh nhau.
Chèn thêm 'X' nếu độ dài chuỗi là số lẻ để đảm bảo chia được thành cặp.
Tham số đầu vào:
Tên biến: s
Kiểu dữ liệu: String
Mô tả: Chuỗi gốc cần mã hóa (chưa chia cặp, chưa xử lý trùng và độ dài lẻ)
lOMoARcPSD| 45470709
12
Giá trị trả về:
Tên biến: Chuoibanma
Kiểu dữ liệu: String
Ý nghĩa: Trả về chuỗi đã được xử , chia thành các cặp tự đúng quy tắc Playfair
(không có cặp trùng, độ dài chẵn)
* Hàm m vị trí
Chức năng: Tìm vị trí (toạ độ hàng và cột) của một kí tự bất kì trong ma trận khoá 5 x 5
Tham số đầu vào:
Tên biến: Khoá 2 chiu o Kiểu dữ liệu: char[] [] o tả: Ma trận khóa 5x5 được tạo
từ chuỗi khóa (dùng trong mã hóa/giải mã Playfair)
Tên biến: c o Kiểu dữ liệu: char
o Mô tả: Kí tự cần m trong ma trận 5 x 5
Giá trị trả về:
Kiểu dữ liệu: int[]
Mô tả: Mảng số nguyên gồm 2 phần tử [i, j], tương ứng với chỉ số hàng và cột của kí tự
trong ma trận, nếu không m thấy vị trí trả v null
lOMoARcPSD| 45470709
13
lOMoARcPSD| 45470709
14
IV. MÃ HOÁ HÀNG
1. Giới thiệu về mã hoá hàng
hóa hàng hóa một phương pháp hóa đơn giản trong đó bản được viết
theo các dòng trên một scột xác định. Thứ tự của các cột sau đó được thay đổi theo một
dãy số khóa cho trước. Bản mã được tạo ra bằng cách đọc lại các cột theo thứ tự mới
* Ưu điểm và nhược điểm mã hoá hàng
Ưu điểm: Mã hóa cột đủ đơn giản để thực hiện bằng tay. Nó thể hóa bất kỳ
tự nào, bao gồm cả dấu cách và dấu chấm câu
Nhược điểm: Tuy nhiên, độ an toàn stăng nếu loại bdấu cách dấu chấm câu.
Thông điệp không phải lúc nào cũng điền đầy lưới chuyển vị. Phần còn lại của lưới chuyển vị
sau đó thể tùy chọn được điền bằng một ký tự đệm (mã hóa cột thông thường), hoặc để
trống (mã hóa cột không đều)
Mã hóa cột là một phương pháp mã hóa đơn giản nhưng hiệu quả. Nó có thể được sử
dụng để hóa một loạt các thông điệp khác nhau và có thđược thực hiện bằng tay hoặc
bằng máy. Tuy nhiên, như với mọi phương pháp hóa, độ an toàn của phụ thuộc vào
việc giữ bí mật khóa và cách thức điền thông điệp vào lưới chuyển vị
2. Tạo khoá
Tên: key
Kiểu dữ liệu: int[] (mảng số nguyên) - đại diện cho thứ tự hoán vị các cột
Mô tả:
o khóa xác định thứ tự đọc các cột trong ma trận sau khi chia văn bản thành
các hàng.
o Độ dài của khóa = số cột của ma trận.
o Mỗi số đại diện cho vị trí cột sẽ được lấy ra theo thứ tự. * Kí tự đệm
Tên: paddingChar (nếu có)
Kiểu dữ liu: char Mô tả:
o Ký tự dùng để lấp đầy nếu số tự trong n bản không chia hết cho số cột
(khóa). o Ví dụ: 'X', 'Z', v.v
3. Mã hoá
Xác định số cột trong để mã hóa thông điệp
Cho thông điệp vào bảng hóa chúng ta cho từng tự o các ô bắt đầu từ trái
sang phải khi hết hàng này thì chúng ta xuống hàng khác đến khi cho hết thông điệp vào bảng.
Chọn khóa K với khóa K sẽ là thứ tự đảo của vị trí các cột. VD: K={3,1,2}
lOMoARcPSD| 45470709
15
Sau khi có khóa K đảo lộn vị trí các cột theo vị trí của khóa K
Lấy thông điệp mã hóa ly từ trái sang phải sau khi lấy hết hàng này thì đến hàng khác
3.1. Kiểu dữ liệu đầu vào Kiểu
dữ liệu: String Mô tả:
o chuỗi văn bản đầu vào chưa hóa o Chchứa tự ch(thường được
chuẩn hóa thành chữ in hoa) o Không chứa dấu, khoảng trắng hoặc ký tự đặc
biệt (thường loại bỏ để đơn giản hóa)
o Có thể cần thêm ký tự đệm (padding) để phù hợp với số cột của khóa
3.2. Kiểu dữ liệu đầu ra
Kiểu dữ liệu: String
Mô tả:
o Chuỗi tự được đọc theo thứ tự cột được quy định bởi khóa o Không chứa
khoảng trắng hoặc ký tự đặc biệt o Có thể có ký tự đệm cuối nếu cần
lOMoARcPSD| 45470709
16
3.3. Lưu đồ thuật toán
3.4. Code chương trình mã hoá
4. Giải mã
Xác định số cột trong bảng mã hóa để biết cần phải giải mã bao nhiêu cột
Cho thông điệp đã được hóa o bảng giải mã theo cách tương tự như qtrình
mã hóa: từ trái sang phải, khi hết hàng này thì xuống hàng khác. - Chọn khóa giải mã K' với K'
là khóa ngược với khóa K đã sử dụng trong quá trình mã hóa. Ví dụ, nếu K={3,1,2} thì K' sẽ là
{1,2,3}
Đảo lộn vị trí các cột của bảng giải mã theo thứ tự của khóa giải mã
K'
Lấy thông điệp giải mã từ trái sang phải, sau khi lấy hết hàng này thì chuyển đến hàng
khác
lOMoARcPSD| 45470709
17
Để giải mã, người nhận phải nh toán độ dài của các cột bằng cách chia độ dài thông
điệp cho độ dài khóa. Sau đó, viết thông điệp ra theo cột một lần nữa, sau đó sắp xếp lại các
cột bằng cách tạo lại từ khóa
4.1. Kiểu dữ liệu đầu vào Kiểu
dữ liệu: String Mô tả:
o Chuỗi đã được mã hóa theo thứ tự cột từ thuật tn mã hóa hàng
o Độ dài có thể chia hết cho số cột, hoặc có thể chứa ký tự đệm
4.2. Kiểu dữ liệu đầu ra
Kiểu dữ liệu: String
Mô tả
o Chuỗi kết quả sau khi tái cấu trúc lại ma trận và đọc theo từng hàng
o thể chứa tđệm cui (nếu không loại bỏ) o Trvề văn bản gần n
giống với bản gốc trước mã hóa (trừ ký tự đệm)
4.3. Lưu đồ thuật toán
4.4. Code chương trình giải mã
lOMoARcPSD| 45470709
18
5. Các hàm bổ sung
* Hàm lấy vị trí phần tử của mảng được sắp xếp theo thứ tự tăng dần
Chức năng:
Dùng để xác định vị trí chỉ số (index) của các phần tử trong mảng arr nếu mảng đó
được sắp xếp theo thứ tự tăng dần.
Ví dụ: nếu arr = [50, 10, 30], thì kết quả là [1, 2, 0] vì 10 nhỏ nhất (ở index 1), ếp theo
là 30 (index 2), và 50 lớn nhất (index 0).
Tham số đầu vào:
Tên biến: arr
Kiểu dữ liệu: int[]
tả: Mảng số nguyên đầu vào cần sắp xếp theo giá trị để xác định vị trí chỉ số ban
đầu của các phần tử theo thứ tự tăng dần
Giá trị trả về:
Kiểu dữ liệu: int[]
Ý nghĩa: Mảng chứa các chỉ số của arr theo thứ tự tăng dần giá trị phần tử
Tức là: arr[result[0]] <= arr[result[1]] <= ... <= arr[result[n-1]]

Preview text:

lOMoAR cPSD| 45470709 lOMoAR cPSD| 45470709
I. CAESAR 1.Giới thiệu mật mã Caesar
Mã hóa Caesar là một trong những kỹ thuật mã hóa cổ điển đơn giản nhất và nổi tiếng
nhất trong lịch sử mật mã học. Phương pháp này được đặt theo tên của Julius Caesar – người
đã sử dụng nó để gửi các thông điệp bí mật. Cơ chế hoạt động dựa trên việc dịch chuyển các
ký tự trong bản rõ một số vị trí nhất định trong bảng chữ cái.
Nguyên lý hoạt động
Mỗi ký tự trong văn bản gốc được thay thế bằng ký tự cách nó một số vị trí trong bảng
chữ cái (theo chiều tiến). Số vị trí dịch chuyển này chính là khóa của thuật toán. Ví dụ, với
khóa = 3, chữ A sẽ trở thành D, B trở thành E, v.v. Sau khi đến chữ Z, việc dịch chuyển sẽ quay vòng lại chữ A. Ví dụ:
Văn bản gốc: HELLO Khóa: 3
Văn bản mã hóa: KHOOR 2. Tạo khóa
Kiểu dữ liệu: int
Mục đích: Dịch chuyển các ký tự theo số bước xác định Yêu cầu:
o Là số nguyên từ 1 đến 25 (vì dịch 26 bước sẽ quay lại ký tự ban đầu)
o Không dùng ký tự đặc biệt, âm hoặc vượt ngoài phạm vi bảng chữ cái 3. Mã hóa
3.1 Kiểu dữ liệu đầu vào
Văn bản cần mã hóa o Kiểu
dữ liệu: String o Yêu cầu:
Chỉ bao gồm chữ cái (A–Z hoặc a–z)
Không dấu, không khoảng trắng, không ký tự đặc biệt
Có thể chuyển sang chữ in hoa để dễ xử lý
3.2 Kiểu dữ liệu đầu ra
Văn bản đã mã hóa
o Kiểu dữ liệu: String o tả:
Chuỗi gồm các ký tự đã được dịch chuyển theo khóa Giữ nguyên độ dài 2 lOMoAR cPSD| 45470709
Không chứa khoảng trắng, không dấu
3.3 Lưu đồ thuật toán
(Lưu đồ có thể vẽ gồm các bước: Nhập văn bản → Lặp qua từng ký tự → Dịch chuyển ký tự
theo khóa → Nối lại thành chuỗi mã hóa → Xuất kết quả) III. PLAYFAIR
1. Giới thiệu mật mã Playfair
Mật mã Playfair là một phương pháp mã hóa trong lĩnh vực mật mã học. Nó được sử
dụng để mã hóa thông điệp bằng cách thay thế các cặp ký tự trong văn bản gốc bằng các cặp
ký tự trong một bảng 5x5 được tạo ra từ một khóa. Dưới đây là một số lý thuyết về mật mã Playfair * Tạo bảng
Bảng Playfair là một ma trận 5x5 được tạo ra từ một khóa. Các chữ cái trong khóa
được sắp xếp không trùng lặp và sau đó được điền vào các ô của bảng. Các ô trống còn lại
được điền bởi các chữ còn lại, loại bỏ “J” thay thế nó bằng “I”
Ví dụ về bảng playfair: key =MINH
* Xác định cặp kí tự
Văn bản cần mã hóa được chia thành các cặp kí tự . nếu có 2 kí tự giống nhau trong
cùng một cặp, thì thêm một kí tự “X” vào giữa chúng.
Nếu độ dài văn bản là số lẻ, thêm một kí tự “X” vào cuối bản rõ
* Ưu điểm và nhược điểm
Ưu điểm: Mật mã Playfair thường được coi là mạnh mẽ trong thời kỳ nó được sử
dụng, đặc biệt là so với một số phương pháp mật mã đơn giản khác
Nhược điểm: Mặc dù mật mã Playfair có ưu điểm về độ an toàn so với mật mã Caesar
và một số phương pháp khác, nhưng nó không được sử dụng nhiều trong thời đại hiện đại vì
nó không đủmạnh mẽ đối với các kỹ thuật mã hóa hiện đại
Mật mã Playfair thường được sử dụng trong quân sự và giao tiếp bí mật trong quá
khứ, nhưng hiện nay nó đã được thay thế bởi các thuật toán mã hóa mạnh mẽ và hiện đại hơn 2. Tạo khoá 3 lOMoAR cPSD| 45470709
Kiểu dữ liệu: String
Mục đích: Dùng để tạo ma trận 5x5 ký tự (Playfair Matrix) Yêu cầu:
o Chỉ chứa chữ cái (A–Z hoặc a–z) o Không có dấu, không chứa số hoặc
ký tự đặc biệt o Thường loại bỏ chữ 'J' (gộp I và J lại làm một) o Có thể
chuyển về chữ in hoa hết (để đơn giản hóa xử lý) o Không lặp ký tự
* Tạo khoá ma trận 5 x 5
Chức năng: Tạo ma trận khóa 5x5 dùng trong thuật toán Playfair từ chuỗi khóa người dùng nhập •
Loại bỏ ký tự trùng lặp • Thay 'J' bằng 'I' •
Bổ sung các ký tự còn thiếu trong bảng chữ cái A–Z (trừ 'J') •
Sắp xếp các ký tự vào ma trận 5x5 Tham số đầu vào: • Tên biến: tFKhoa.getText() • Kiểu dữ liệu: String •
Mô tả: Chuỗi khóa được nhập từ một ô nhập liệu giao diện (text field), được chuyển
sang chữ in hoa bằng .toUpperCase() Giá trị trả về: • Tên biến: Khoa2Chieu • Kiểu dữ liệu: char[] [] •
Mô tả: Ma trận 5x5 ký tự khóa được tạo theo quy tắc của Playfair (loại bỏ trùng, không
có 'J', chứa đủ 25 ký tự) 4 lOMoAR cPSD| 45470709 3. Mã hoá
Trường hợp 1 (Cùng hàng): nếu một cặp kí tự nằm trên cùng một hàng thì thay thế
mỗi kí tự bằng kí tự bên phải nó. Nếu nằm ở cột cuối cùng thì quay về ô đầu tiên của cột đó
Trường hợp 2 (Cùng cột): nếu cặp kí tự cùng nằm trên một cột, thì thay thế mỗi kí tự
bằng kí tự bên dưới nó. Nếu nằm ở hàng cuối cùng thì quay về ô đầu tiên của cột đó
Trường hợp 3 (Khác hàng và cột): Tạo thành hình chữ nhật với hai kí tự và thay thế mỗi
kí tự bằng góc đối diện của hình chữ nhật
3.1. Kiểu dữ liệu đầu vào 5 lOMoAR cPSD| 45470709
* Văn bản cần mã hoá
Kiểu dữ liệu: string
Mục đích: Là đầu vào cần được mã hóa Yêu cầu:
o Chỉ chứa chữ cái o Không dấu, không số, không ký tự đặc biệt.
o Nếu có cặp ký tự trùng nhau trong một cặp (ví dụ: “meet” → “me et” → “me
ex et”), cần chèn thêm ký tự đệm như 'X'.
o Nếu số ký tự là lẻ, thêm 'X' vào cuối để đủ cặp.
3.2. Kiểu dữ liệu đầu ra
* Văn bản đã được mã hoá
Kiểu dữ liệu: string Mô tả: o Là chuỗi ký tự đã được mã hóa từ văn bản gốc.
o Chỉ gồm chữ cái in hoa (A–Z), không có dấu, khoảng trắng hay ký tự đặc biệt.
o Độ dài là số chẵn, vì văn bản gốc được chia thành các cặp ký tự o Có thể chứa ký
tự đệm (ví dụ 'X') được chèn thêm trong quá trình mã hóa để:
Tránh cặp ký tự trùng nhau (ví dụ: "LL" → "LX LX")
Đảm bảo độ dài chẵn 6 lOMoAR cPSD| 45470709
3.3. Lưu đồ thuật toán 7 lOMoAR cPSD| 45470709
3.4. Code chương trình mã hoá 4. Giải mã
Trường hợp 1 (Cùng Hàng) : nếu một cặp kí tự nằm trên cùng một hàng thì thay thế
mỗi kí tự bằng kí tự bên trái nó. Nếu nằm ở cột cuối cùng thì quay về ô đầu tiên của cột đó
Trường hợp 2 (Cùng cột) : nếu cặp kí tự cùng nằm trên một cột, thì thay thế mỗi kí tự
bằng kí tự bên trên nó. Nếu nằm ở hàng cuối cùng thì quay về ô đầu tiên của cột đó
Trường hợp 3 (Khác hàng và cột): Tạo thành hình chữ nhật với hai kí tự và thay thế mỗi
kí tự bằng góc đối diện của hình chữ nhật
4.1. Kiểu dữ liệu đầu vào
* Văn bản cần giải mã
Kiểu dữ liệu: string
Mục đích: Là đầu vào cần được giải mã Yêu cầu:
Chỉ gồm chữ cái (không dấu, không khoảng trắng, không ký tự đặc biệt). •
Độ dài là số chẵn, chia được thành các cặp ký tự. •
Nếu có ký tự chèn (ví dụ 'X'), cần xử lý khi hậu giải mã (tùy quy tắc mã hóa ban đầu).
4.2. Kiểu dữ liệu đầu ra 8 lOMoAR cPSD| 45470709
* Văn bản cần được giải mã
Kiểu dữ liệu: string Mô tả: o Là chuỗi ký tự đã được giải mã từ ciphertext.
o Chỉ gồm chữ cái in hoa (A–Z), không có dấu, khoảng trắng hay ký tự đặc biệt.
o Có thể vẫn chứa ký tự đệm (ví dụ 'X') nếu không loại bỏ sau giải mã.
o Người dùng có thể cần hậu xử lý để loại bỏ ký tự chèn và khôi phục văn bản gốc chính xác.
4.3. Lưu đồ thuật toán 9 lOMoAR cPSD| 45470709 10 lOMoAR cPSD| 45470709
4.4. Code chương trình giải mã 5. Các hàm bổ sung
* Hàm tách chuỗi thành từng cặp kí tự
Chức năng: Tiền xử lý chuỗi trước khi mã hóa bằng cách chia chuỗi thành các cặp ký tự, đồng thời: •
Chèn ký tự 'X' nếu hai ký tự giống nhau đứng cạnh nhau. •
Chèn thêm 'X' nếu độ dài chuỗi là số lẻ để đảm bảo chia được thành cặp. Tham số đầu vào: • Tên biến: s • Kiểu dữ liệu: String •
Mô tả: Chuỗi gốc cần mã hóa (chưa chia cặp, chưa xử lý trùng và độ dài lẻ) 11 lOMoAR cPSD| 45470709 Giá trị trả về: • Tên biến: Chuoibanma • Kiểu dữ liệu: String •
Ý nghĩa: Trả về chuỗi đã được xử lý, chia thành các cặp ký tự đúng quy tắc Playfair
(không có cặp trùng, độ dài chẵn) * Hàm tìm vị trí
Chức năng: Tìm vị trí (toạ độ hàng và cột) của một kí tự bất kì trong ma trận khoá 5 x 5 Tham số đầu vào: •
Tên biến: Khoá 2 chiều o Kiểu dữ liệu: char[] [] o Mô tả: Ma trận khóa 5x5 được tạo
từ chuỗi khóa (dùng trong mã hóa/giải mã Playfair) •
Tên biến: c o Kiểu dữ liệu: char
o Mô tả: Kí tự cần tìm trong ma trận 5 x 5 Giá trị trả về: • Kiểu dữ liệu: int[] •
Mô tả: Mảng số nguyên gồm 2 phần tử [i, j], tương ứng với chỉ số hàng và cột của kí tự
trong ma trận, nếu không tìm thấy vị trí trả về null 12 lOMoAR cPSD| 45470709 13 lOMoAR cPSD| 45470709 IV. MÃ HOÁ HÀNG
1. Giới thiệu về mã hoá hàng
Mã hóa hàng hóa là một phương pháp mã hóa đơn giản trong đó bản rõ được viết
theo các dòng trên một số cột xác định. Thứ tự của các cột sau đó được thay đổi theo một
dãy số khóa cho trước. Bản mã được tạo ra bằng cách đọc lại các cột theo thứ tự mới
* Ưu điểm và nhược điểm mã hoá hàng
Ưu điểm: Mã hóa cột đủ đơn giản để thực hiện bằng tay. Nó có thể mã hóa bất kỳ ký
tự nào, bao gồm cả dấu cách và dấu chấm câu
Nhược điểm: Tuy nhiên, độ an toàn sẽ tăng nếu loại bỏ dấu cách và dấu chấm câu.
Thông điệp không phải lúc nào cũng điền đầy lưới chuyển vị. Phần còn lại của lưới chuyển vị
sau đó có thể tùy chọn được điền bằng một ký tự đệm (mã hóa cột thông thường), hoặc để
trống (mã hóa cột không đều)
Mã hóa cột là một phương pháp mã hóa đơn giản nhưng hiệu quả. Nó có thể được sử
dụng để mã hóa một loạt các thông điệp khác nhau và có thể được thực hiện bằng tay hoặc
bằng máy. Tuy nhiên, như với mọi phương pháp mã hóa, độ an toàn của nó phụ thuộc vào
việc giữ bí mật khóa và cách thức điền thông điệp vào lưới chuyển vị 2. Tạo khoá • Tên: key •
Kiểu dữ liệu: int[] (mảng số nguyên) - đại diện cho thứ tự hoán vị các cột • Mô tả:
o Là khóa xác định thứ tự đọc các cột trong ma trận sau khi chia văn bản thành các hàng.
o Độ dài của khóa = số cột của ma trận.
o Mỗi số đại diện cho vị trí cột sẽ được lấy ra theo thứ tự. * Kí tự đệm
Tên: paddingChar (nếu có) •
Kiểu dữ liệu: char Mô tả:
o Ký tự dùng để lấp đầy nếu số ký tự trong văn bản không chia hết cho số cột
(khóa). o Ví dụ: 'X', 'Z', v.v 3. Mã hoá
Xác định số cột trong để mã hóa thông điệp
Cho thông điệp vào bảng mã hóa chúng ta cho từng ký tự vào các ô bắt đầu từ trái
sang phải khi hết hàng này thì chúng ta xuống hàng khác đến khi cho hết thông điệp vào bảng.
Chọn khóa K với khóa K sẽ là thứ tự đảo của vị trí các cột. VD: K={3,1,2} 14 lOMoAR cPSD| 45470709
Sau khi có khóa K đảo lộn vị trí các cột theo vị trí của khóa K
Lấy thông điệp mã hóa lấy từ trái sang phải sau khi lấy hết hàng này thì đến hàng khác
3.1. Kiểu dữ liệu đầu vào Kiểu dữ liệu: String Mô tả:
o Là chuỗi văn bản đầu vào chưa mã hóa o Chỉ chứa ký tự chữ (thường được
chuẩn hóa thành chữ in hoa) o Không chứa dấu, khoảng trắng hoặc ký tự đặc
biệt (thường loại bỏ để đơn giản hóa)
o Có thể cần thêm ký tự đệm (padding) để phù hợp với số cột của khóa
3.2. Kiểu dữ liệu đầu ra Kiểu dữ liệu: String Mô tả:
o Chuỗi ký tự được đọc theo thứ tự cột được quy định bởi khóa o Không chứa
khoảng trắng hoặc ký tự đặc biệt o Có thể có ký tự đệm ở cuối nếu cần 15 lOMoAR cPSD| 45470709
3.3. Lưu đồ thuật toán
3.4. Code chương trình mã hoá 4. Giải mã
Xác định số cột trong bảng mã hóa để biết cần phải giải mã bao nhiêu cột
Cho thông điệp đã được mã hóa vào bảng giải mã theo cách tương tự như quá trình
mã hóa: từ trái sang phải, khi hết hàng này thì xuống hàng khác. - Chọn khóa giải mã K' với K'
là khóa ngược với khóa K đã sử dụng trong quá trình mã hóa. Ví dụ, nếu K={3,1,2} thì K' sẽ là {1,2,3}
Đảo lộn vị trí các cột của bảng giải mã theo thứ tự của khóa giải mã K'
Lấy thông điệp giải mã từ trái sang phải, sau khi lấy hết hàng này thì chuyển đến hàng khác 16 lOMoAR cPSD| 45470709
Để giải mã, người nhận phải tính toán độ dài của các cột bằng cách chia độ dài thông
điệp cho độ dài khóa. Sau đó, viết thông điệp ra theo cột một lần nữa, sau đó sắp xếp lại các
cột bằng cách tạo lại từ khóa
4.1. Kiểu dữ liệu đầu vào Kiểu dữ liệu: String Mô tả:
o Chuỗi đã được mã hóa theo thứ tự cột từ thuật toán mã hóa hàng
o Độ dài có thể chia hết cho số cột, hoặc có thể chứa ký tự đệm
4.2. Kiểu dữ liệu đầu ra
• Kiểu dữ liệu: String • Mô tả
o Chuỗi kết quả sau khi tái cấu trúc lại ma trận và đọc theo từng hàng
o Có thể chứa ký tự đệm ở cuối (nếu không loại bỏ) o Trả về văn bản gần như
giống với bản gốc trước mã hóa (trừ ký tự đệm)
4.3. Lưu đồ thuật toán
4.4. Code chương trình giải mã 17 lOMoAR cPSD| 45470709 5. Các hàm bổ sung
* Hàm lấy vị trí phần tử của mảng được sắp xếp theo thứ tự tăng dần Chức năng:
Dùng để xác định vị trí chỉ số (index) của các phần tử trong mảng arr nếu mảng đó
được sắp xếp theo thứ tự tăng dần. •
Ví dụ: nếu arr = [50, 10, 30], thì kết quả là [1, 2, 0] vì 10 nhỏ nhất (ở index 1), tiếp theo
là 30 (index 2), và 50 lớn nhất (index 0). Tham số đầu vào: • Tên biến: arr • Kiểu dữ liệu: int[] •
Mô tả: Mảng số nguyên đầu vào cần sắp xếp theo giá trị để xác định vị trí chỉ số ban
đầu của các phần tử theo thứ tự tăng dần Giá trị trả về: • Kiểu dữ liệu: int[] •
Ý nghĩa: Mảng chứa các chỉ số của arr theo thứ tự tăng dần giá trị phần tử
Tức là: arr[result[0]] <= arr[result[1]] <= ... <= arr[result[n-1]] 18