Mã hóa dữ liệu là một quá trình mà các dữ liệu dạng văn bản gốc được chuyển thành văn bản mật mã để làm nó không thể đọc được.. Có thể chia các phương pháp mã hóa dữ liệu thành hai hệ mậ
Trang 1GIỚI THIỆU
Mật mã học là một ngành khoa học về mã hóa dữ liệu nhằm bảo mật thông tin
Mã hóa dữ liệu là một quá trình mà các dữ liệu dạng văn bản gốc được chuyển thành văn bản mật mã để làm nó không thể đọc được Ngày nay, để đảm bảo sự an toàn và
bí mật của các thông tin quan trọng, nhạy cảm, vấn đề mã hóa dữ liệu ngày càng trở nên cấp thiết và được nhiều người quan tâm
Có thể chia các phương pháp mã hóa dữ liệu thành hai hệ mật mã cơ bản: Hệ mật mã cổ điển với các hệ mật mã như hệ mã Caesar, Affine … và hệ mật mã hiện đại với hệ mã đối xứng (DES) và hệ mã bất đối xứng (RSA) Với mỗi hệ mật mã ta
có những phương pháp thám mã tương ứng
Tuy hệ mật mã cổ điển đến nay không còn được sử dụng nhiều nhưng chính hệ mật mã này là nền tảng cho sự phát triển của mật mã hiện đại
Mặc khác, trong các tài liệu về mật mã hiện nay các phương pháp mã hóa, giải
mã, thám mã đều thực hiện trên bảng chữ cái tiếng Anh mà ít thực hiện trên bảng chữ cái tiếng Việt
Từ các lý do trên nên nhóm chúng em quyết định chọn đề tài “Viết chương
trình thám mã Caesar bằng phương pháp Brute-Force (dò tìm toàn bộ)” cho phần
bài tập của nhóm
Trang 2A PHẦN LÝ THUYẾT
1 Khái niệm mã hóa dữ liệu và giải mã
Mã hóa dữ liệu là tiến trình che dấu dữ liệu thật (plaintext), nghĩa là chuyển dữ liệu thật thành dữ liệu không có ý nghĩa hoặc có ý nghĩa khác xa với dữ liệu thật Tiến trình đó gọi là mã hóa (encrytion) Kết quả của tiến trình gọi là bản mã (ciphertext) Từ “encrytion” được tạo ra từ “cryptography” (mật mã) xuất phát từ tiếng Hi Lạp cổ xưa “Kryptos” (Che dấu) và từ “graphia” (viết) Tiến trình mã hóa dữ liệu có thế được thực hiện bằng cách hoán vị dữ liệu thật hoặc thay thế chúng bằng
dữ liệu khác
Tiến trình ngược với tiến trình mã hóa tức là chuyển từ bản mã thành dữ liệu ban đầu gọi là giải mã
Mã hóa và giải mã là hai thành phần của mật mã học
2 Hệ mã Caesar
Trong mật mã học, mật mã Caesar (Xê da), còn gọi là mật mã dịch chuyển, là một trong những mật mã đơn giản và được biết đến nhiều nhất Hệ mã Caesar là một
hệ mã hóa thay thế đơn âm, làm việc trên bẳng chữ cái tiếng Anh 26 ký tự Đó là một dạng của mật mã thay thế, trong đó mỗi ký tự trong văn bản được thay thế bằng một
ký tự cách nó một đoạn trong bảng chữ cái để tạo thành bản mã
Ví dụ, đối với bảng mã tiếng anh (ABCDEFGHI…), nếu độ dịch là 3, A sẽ được thay bằng D, B sẽ được thay bằng E, …, W sẽ thay bằng Z, X sẽ thay bằng A, Y
sẽ thay bằng B và Z thay bằng C
Phương pháp được đặt tên theo Caesar, vị hoàng đế đã sử dụng nó thường xuyên trong công việc
Không gian bản rõ P là các từ cần được mà hóa được tạo từ bảng chữ cái A Không gian bản rỏ C là các từ đã được mã hóa
Trang 3Để mã hóa, người ta đánh số các chữ cái từ 0 N-1 (N là tổng số phần tử của bản chữ cái) Không gian khóa K=ZN Với mỗi khóa K ∈ K hàm mã hóa và giải mã
một ký tự có số thứ tự là I sẽ được biểu diễn như sau:
a Mã hóa :
EK(i) = (i+k) mod N
b Giải mã :
DK(i) = (i-k) mod N
Trong đó:
N =26 nếu hệ mã Caesar sử dụng trên bảng chữ cái tiếng Anh (nếu sử dụng trên bảng chữ cái khác thì N sẽ thay đổi)
k : tương ứng với số thứ tự chữ cái trong bảng mã (ví dụ : a=0, b=1….)
Xét ví dụ sau:
Cho bản rõ : TOIYEUVIETNAM
Khóa k =4
Tìm bản mã?
Vậy bản mã là : YSMBYZWMIYREQ
Quá trình giải mã thì ngược lại với quá trình mã hóa
c Thám mã
Hệ Caesar là hệ mã hoá cũ và không an toàn vì không gian khoá của nó nhỏ (N =26), do đó có thể thám mã theo phương pháp vét cạn Khoá giải mã có thể tính ngay ra được từ khoá mã hoá Do chỉ có 26 khoá nên
ta có thể thử lần lượt các khoá cho đến khi tìm được khoá đúng
Ngoài ra ta có thể áp dụng phương phân tích tần số số ký tự xuất hiện trong bảng chữ cái (Áp dụng cho bảng mã dài) để thám mã Bảng dưới là tần suất hiện hiện của các ký tự trong bảng chữ cái tiếng Anh
Trang 4e t a o i n s h r d l u c
Bảng 2.1 : Bảng tần số xuất hiện của các ký tự trong bảng chữ cái
Trang 5B PHẦN TRIỂN KHAI
1 Phân tích yêu cầu
Yêu cầu bài toán đặt ra là viết chương trình thám mã hệ mã Caesar bằng phương pháp vét cạn Do số khóa sử dụng của hệ mã Caesar tương đối ít nên ta có thể hoàn toàn dò tìm từng trường hợp dưới sự giúp đỡ của máy tính
Ngôn ngữ lập trình sử dụng : C#
2 Các nội dung chính
Trên phần lý thuyết ta chỉ sử dụng bảng chữ cái tiếng Anh để minh họa cho hệ
mã Caesar, nhưng trong thực tế ta sử dụng bảng chữ cái tiếng Việt, các kí số, kí hiệu
để trao đổi với nhau Vì vậy ta cần định nghĩa lại bảng chữ cái như sau:
"aáàạảãăắằặẳẵâấầậẩẫbcdđeéèẹẻẽêếềệểễfghiíìịỉĩjklmnoóòọỏõôốồộổỗ ơớờợởỡpqrstuúùụủũưứừựửữvwxyýỳỵỷỹAÁÀẠẢÃĂẮẰẶẲẴÂẤẦẬẨẪBCDĐEÉÈẸẺẼÊ ẾỀỆỂỄFGHIÍÌỊỈĨJKLMNOÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠPQRSTUÚÙỤỦŨƯỨỪỰỬỮVWXYÝỲỴ ỶỸ0123456789~`!@#$%^&*()-_=+[]{}|\\:;’”,<>.?/ ";
Trong chương trình ta có thể tạo ra các lớp để tiện cho việc lập trình
a Lớp xulykitu
Lớp xulykitu bao gồm các phương thức như:
Xoakhoangtrang : Dùng để xóa các khoảng trắng
b Lớp caeser
Lớp caeser bào gồm các phương thức như:
Mahoa : dùng để mã hóa ký tự theo mã hóa Caeser Giaima : dùng để giải mã ký tự theo mã hóa Caeser Thamma : dùng để thám mã
3 Chi tiết các phương thức
Phương thức xóa khoảng trắng : dùng để xóa các ký tự trắng
public string xoakhoangtrang( string chuoi)
{
Trang 6chuoi = chuoi.Trim();
int i;
while ((i = chuoi.IndexOf(" ")) > 0)
chuoi = chuoi.Remove(i, 1);
}
Phương thức mã hóa : dùng để mã hóa một chuỗi
public string Mahoa( string s, int k)
{
char [] tam = new char [l];
int [] so = new int [l];
for ( int j =0; j<l ; j++)
for ( int i = 0; i < n; i++)
{
{
so[j] = i;
chiso = (so[j] + k) % n; tam[j] = p[chiso];
}
}
return banma;
}
Phương thức giải mã : dùng để giải mã một chuỗi
public string Giaima( string s, int k) Giải mã : Ek(I)= (i - k)mod n
{
char [] tam = new char [l];
int [] so = new int [l];
for ( int j = 0; j < l; j++)
Trang 7for ( int i = 0; i <n; i++)
{ if (p[i] == banma[j]) {
so[j] = i; //Lấy vị trí i trên tập ký tự chiso = (so[j]+n - k) % n;
tam[j] = p[chiso]; }
}
string banro = new string (tam); //
return banro; } Phương thức thám mã : dùng để thám mã một chuỗi public void Thamma( string s, RichTextBox txtbanro) // {
char [] banma = s.ToCharArray(); int chiso;
int l = banma.Length; char [] tam = new char [l]; int [] so = new int [l]; for ( int k = 1; k < n-1; k++) {
for ( int j = 0; j < l; j++) for ( int i = 0; i < n; i++) if (p[i] == banma[j]) {
try {
so[j] = i; chiso = (so[j] + n - k) % n; tam[j] = p[chiso];
}
}
string banro = new string (tam);
txtbanro.Text += '\n' + banro.ToString()+'\n'; }
Trang 8
}
4 Chi tiết chương trình
- Form mã hóa
- Form thám mã
Trang 10KẾT LUẬN
Qua bài tập này nhóm em đã đã được một số kết quả nhất định Bên cạnh đó cũng còn tồn tại một số mặt
Kết quả đạt được:
- Hiểu được hệ mã Caeser, biết được cách mã hóa, giải mã, thám mã
- Triển khai được chương trình trên bảng chữ cái tiếng Việt
- Chương trình chạy ổn định, giao diện dễ nhìn, dễ sử dụng
- Kết quả chương trình chính xác, đúng với kiểm chứng thực tế
Một số tồn tại:
Phương pháp thám mã bằng cách sử dụng phương pháp phân tích tần số xuất hiện các kí tự chưa được triển khai
Hướng phát triển:
Nếu có điều kiện nhóm sẽ phát triển chương trình có thể mã hóa, giải
mã, thám mã thêm các hệ mã cổ điển khác như hệ mã Affine, hệ mã Hill
Mặc dù đã cố gắng hết sức nhưng trong quá trình thực hiện các thiếu sót mắc phải là không thể tránh Nhóm em xin chân thành cảm ơn thầy Phạm Văn Tho đã nhiệt tình giảng dạy chúng em trong suốt thời gian học tập, tạo điều kiện để nhóm hoàn thành bài tập Cảm ơn các thành viên trong lớp đã trao đổi góp ý để bài tập được hoàn thiện hơn
Trang 11MỤC LỤC Nội dung: