http:// www.diachiweb.com · Khóa (key): là khóa dùng trong việc mã hóa và giải mã 2.1-Phương pháp Caesar : 2.1.1- Nguyên tắc : Trong sơ đồ Caesar mỗi ký tự được thay thế bằng ký tự đứng sau nó k ký tự trong bảng ký tự được xếp từ A Z Vòtrí 1 2 3 4 5 6 7 8 9 10 11 12 Kítự A B C D E F G H I J K L 13 14 15 16 17 18 19 20 21 22 23 24 25 26 M N O P Q R S T U V W X Y Z Ví dụ: Dùng bảng ký tự với k= 4,ta có thể mã hóa bản thông báo ‘HELLO’ như sau: Bản rõ : H E L L O Bản mã: L I P P S Để giải mã người ta dùng khóa k =4 và phục hồi lại bản rõ bằng cách dùng phép biến đổi ngược lại. 2.1.2- Giải thuật viết bằng ngôn ngữ giả: · Mã hóa : Input : Chuổi string _in cần mã hóa K: khóa /*khoảng cách vò trí ký tự đứng sau*/ Output: Chuổi string_out đã mã hóa Procedure MAHOACAESAR; Begin Gán biến string_out bằng rỗng; /*dùng chứa kết quả tạm thời khi mã hóa */ While chưa hết chuổi string_in do Begin -Đọc kí tự trong chuổi string_in -Tìm vò trí kí tự vừa đọc được trong bảng kí tự -Cộng vò trí vừa tìm được với k -Tìm kí tự ứng với vò trí vừa tìm được trong bảng kí tự -Nối kí tự vừ tìm được vào chuồi string_out end End. · Giải mã : Input : Chuổi string_in cần giải mã . K:khóa /* khoảng cách vò trí ký tự đứng sau đã thay thế */. Output :Chuổi string_out đã giải mã . Procedure GIAIMACAESAR; Begin Gán biến string_out bằng rỗng; /*dùng chứa kết quả tạm thời khi mã hóa */ While chưa hết chuổi string_in do Begin -Đọc kí tự trong chuổi string_in -Tìm vò trí kí tự vừa đọc được trong bảng kí tự -Trừ vò trí vừa tìm được với k http:// www.diachiweb.com -Tìm kí tự ứng với vò trí vừa tìm được trong bảng kí tự -Nối kí tự vừ tìm được vào chuồi string_out end End. 2.2 Phương pháp KEYWORD : 2.2.1- Nguyên tắc: Trong phương pháp KEYWORD từng ký tự của bản rõ sẽ được cộng thêm vào liên tiếp theo từng ký tự một của từ khóa.Phép cộng được thực hiện theo modulo 26 . 2.2.2-Ví dụ : Giả sử bảng ký tự và vò trí của chúng cho bởi : Vòtrí 1 2 3 4 5 6 7 8 9 10 11 12 Kítự A B C D E F G H I J K L 13 14 15 16 17 18 19 20 21 22 23 24 25 26 M N O P Q R S T U V W X Y Z Với từ khóa ‘KEY’ thì thông báo ‘HELLO’ được mã hóa như sau : Bản rõ : H E L L O Từ khóa : K E Y K E Bản mã : S J K W T Người nhận cũng phải biết từ khóa và phục hồi lại bản rõ bằng cách trừ từng ký tự của bản mã cho từng kí tự của từ khóa. 2.2.3-Giải thuật :viết bằng ngôn ngữ giả · Mã hóa: Input chuổi string_in cần mã hóa Khóa: keyword Output chuổi string_out đã mã hóa Procedure MAHOA_KEYWORD Begin Gán string_out:=rổng; Gán j:=1; While chưa hết chuổi string_in do Begin /*cắt chổi string_in ra từng đoạn */ /*hiện phép cộng với khóa*/ For i:=1 to chiều dài của khóa do Begin -Đọc từng kí tự string_in(i*j) của chuổi -Tìm vò trí của string_in(i*j) trong bảng kí tự -Tìm vò trí của khóa(i) trong bảng kí tự -Cộng 2 vò trí vừa tìm được -Tìm kí tự ứng với kết quả của phép cộng trong bảng kí tự -Nối kí tự vưà tìm được vào string_out end; gán j=j+1; end; · Giải mã : http:// www.diachiweb.com Input: chuổi string_in cần mã hóa Khóa: keyword; Output chuổi string đã giải mã ; Procedure GIAIMA_KEYWORD Begin Gán string_out:=rổng; Gán j:=1; While chưa hết chuổi do Begin /*cắt chổi string_in ra từng đoạn để thực */ /*hiện phép cộng với khóa*/ For i:=1 to chiều dài của khóa do Begin -Đọc kí tự string_in(i*j) của chuổi -Tìm vò trí của string_in(i*j) trong bảng kí tự -Tìm vò trí của khóa(i) trong bảng kí tự -Trừ 2 vò trí vừa tìm được -Tìm kí tự ứng với kết quả của phép trừ trong bảng kí tự -Nối kí tự vưà tìm được vào string_out end; gán j:=j+1; end; 2.3.Phương pháp dùng bảng thay thế : Một phương pháp khác khéo léo hơn là dùng bảng thay thế . 2.3.1-Nguyên tắc : Ta đònh nghóa 2 bảng ký tự : · Bảng 1 chứa các ký tự gốc (ký tự trong bản rõ ). · Bảng 2 chứa các ký tự thay thế (ký tự sẽ đưỡc thay để thành bản mã ). Cách thực hiện :Đọc từng ký tự trong bản rõ ,dò vào bảng 1 tìm ký tự thay thế tương ứng trong bảng 2 . Ghép các ký tự lấy được sẽ tạo thành bản mã . 2.3.2-Ví dụ: Ký tự gốc A B C D E F G H I J K Ký tự thay thế Q W E R T Y U I O P A L M N O P Q R S T U V W X Y Z S D F G H J K L Z X C V B N M Thông báo ‘HELLO’ sẽ được mã hoá như sau Bản rõ H E L L O Bản mã I T S S G Để giải mã người nhận cũng phải biết bảng ký tự thay thế và làm ngược lại . http:// www.diachiweb.com 2.3.3- Giải thuật :Giải thuật được viết bằng ngôn ngữ giả · Mã hóa : Input : Chuổi string_in cần mã hóa . Bảng ký tự thay thế ,bảng kí tự gốc Output :Chuổi string_out đã mã hóa . Procedure MAHOATHAYTHẾ Begin Gán string_out:=rổng; While chưa hết chuổi string_in do begin -Đọc từng kí tự trong chuổi string_in -Tìm vò trí của kí tự vừa đọc được trong bảng kí tự -Tìm kí tự thay thế ứng với vò trí vừa tìm được -Nối kí tự thay thế vào chuổi string_out end; · Giải mã: Input : Chuổi string_in cần giải mã, Bảng ký tự thay thế,bảng kí tự gốc Output :Chuổi string_out đã giải mã . Procedure GIAIMA_THAYTHE Begin Gán string_out:=rổng; While chưa hết chuổi string_in do begin -Đọc từng kí tự trong chuổi string_in -Tìm vò trí của kí tự vừa đọc được trong bảng kí tự thay thế -Tìm kí tự gốc ứng với vò trí vừa tìm được -Nối kí tự gốc vào chuổi string_out end; 2.4.Phương pháp hoán vò : 2.4.1- nguyên tắc : Phương pháp nầy sắp xếp các ký tự trong bản rõ lại theo một qui luật hoán vò nào đó .Việc sắp xếp lại sẽ làm thay đổi toàn bộ cấu trúc của thông báo trước và bản rõ sau khi được sắp xếp sẽ thành bản mã . 4.2- Ví dụ : Cho khóa hoán vò như sau : 312 ,ta chia thông báo ‘HELLO’ ra thành từng khối (xâu ký tự con) có độ dài 3 ký tự .lúc nầy thông báo ‘HELLO’ được mã hóa như sau Vò trí ban đầu 1 2 3 Vò trí sau hoán vò 3 1 2. Vò trí : 1 2 3 1 2 3 Bản rõ : H E L L O ‘ ‘ Bản mã L H E ‘ ‘ L O Trong đó ‘ ‘ là ký tự khoảng trắng thêm vào cho đủ số nguyên lần chiều dài khoá hoán vò . 2.4.3- Giải thuật : Giải thuật được viết bằng ngôn ngữ giả. · MÃ HÓA : Input :Chuổi string_in cần mã hóa . Khoá hoán vò /*chuổi số khác nhau vàsao cho tập hợp các số phải có */ /* thứ tự liên tiếp*/ http:// www.diachiweb.com Output :Chuổi string_out đã mã hóa Procedure MAHOA_HOANVI Begin Gán string_out:=rổng; While chưa hết chuồi string_in do Begin -Đọc từng khối,mỗi khối có độ dài bằng độ dài của khóa -Xác đònh vò trí hoán vò cho mỗi kí tự trong một khối -Đọc kí tự ứng với vò trí xác đònh được trong khóa -Nối kí tự vừa đọc được vào string_out End End · Giải mã:tương tự phần mã hóa 3.1.Lưu đồ giải thuật mã hóa Begin nhập:bang_ro nhập:Khoa bang_ma:=’’ n:=length(bang_ro) m:=length(khoa) i:=0 http:// www.diachiweb.com S ẹ S ẹ S ẹ End Lửu ủo giaỷi thuaọt maừ hoựa 3.2.Lửu ủo giaỷi thuaọt giaỷi maừ Begin bang_ro:=bang_ro + n:=n+1 n mod m = 0 j:=1 Bang_ma:=bang_ma + bang_ro((i*m)+(khoa[j])) j:=j+1 j=m+1 i:=i + 1 i=n/m nhaọp:bang_ma nhaọp:Khoa bang_ro:= n:=length(bang_ma) m:=length(khoa) i:=0 http:// www.diachiweb.com S Đ S Đ End Lưu đồ giải thuật giải mã 3.3.Giải thuật mã hóa viết bằng ngôn ngữ Pascal Input :bang_ro cần mã hóa . Khoa Output :bang_ma đã mã hóa Procedure Ma_hoa_hoan_vi(var bang_ro,bang_ma:string;khoahv:string); Var m,n,k,i,j:integer; Begin n:=length(st); m:=length(khoahv); k:=(n div m) +1; for I :=n +1 to k*n do bang_ro:=bang_ro +’ ’; bang_ma:=’’; for i:=0 to k-1 do for j:=1 to m do begin Val(khoahv[j],so,e); Bang_ro:=bang_ro + bang_ma((i*m)+(khoa[j])) j:=j+1 j=m i:=i + 1 i=n/m j:=1 Đổi khóa http:// www.diachiweb.com Bang_ma:=bang_ma +bang_ro[so +(i)*m]; end; end; 3.4.Giải thuật giải mã viết bằng ngôn ngữ Pascal Input :bang_ma cần giải mã, Khoa . Output :bang_ro đã giải mã . Procedure Giai_ma_hoan_vi(var bang_ma,bang_ro:string;khoahv:string); Var m,n,k,i,j:integer; Function doikhoa(khoahv:string):string; {input khoa hoan vi; output khoa hoan vi da duoc doi lai} var tam:string;j,kitu:string[2]; i,n:integer; begin tam:=’’; n:=length(khoahv); for I:=1 to n do begin Str(I,j); Str((pos(j,khoahv)),kitu); Tam:=tam+kitu; end; doikhoa :=tam; end; begin n:=length(bang_ma); m:=length(khoahv); k:=(n div m) +1; khoahv :=doikhoa(khoahv); for i:=0 to k-1 do for j:=1 to m do begin val(khoahv[j],so,l); bang_ro:=bang_ro + bang_ma[so +(i)*m]; end; end; . tự sẽ đưỡc thay để thành bản mã ). Cách thực hiện :Đọc từng ký tự trong bản rõ ,dò vào bảng 1 tìm ký tự thay thế tương ứng trong bảng 2 . Ghép các ký tự lấy được sẽ tạo thành bản mã . . bộ cấu trúc của thông báo trước và bản rõ sau khi được sắp xếp sẽ thành bản mã . 4.2- Ví dụ : Cho khóa hoán vò như sau : 312 ,ta chia thông báo ‘HELLO’ ra thành từng khối (xâu ký tự con). -Nối kí tự vừ tìm được vào chuồi string_out end End. 2.2 Phương pháp KEYWORD : 2.2.1- Nguyên tắc: Trong phương pháp KEYWORD từng ký tự của bản rõ sẽ được cộng thêm vào liên tiếp theo từng