Tải bản đầy đủ (.docx) (11 trang)

Viết chương trình thám mã Caesar bằng phương pháp Brute-Force (dò tìm toàn bộ)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (261.39 KB, 11 trang )

Bài tập môn : ATBMTT

Giáo viên : Phạm Văn Tho

GIỚ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.

Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Trang 1


Bài tập môn : ATBMTT

Giáo viên : Phạm Văn Tho



A. 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.

Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Trang 2



Bài tập môn : ATBMTT

Giáo viên : Phạm Văn Tho

Để 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ã?
Bản rỏ
T
O I
Y E
U
i
19 14 8
23 4
20

(i+k) mod N 23 18 12 1
8
24
Bản mã
Y S
M B
Y Z
Vậy bản mã là : YSMBYZWMIYREQ

V
21
25
W

I
8
12
M

E
4
8
I

T
19
23
Y

N

13
17
R

A
0
4
E

M
12
16
Q

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.
Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Trang 3


Bài tập môn : ATBMTT
e

12.7
m
2.4

Giáo viên : Phạm Văn Tho

t
a
o
i
n
s
h
r
d
l
u
9.1 8.2 7.5
7
6.7 6.3 6.1
6
4.3
4
2.8
w
f
y
g
p
b

v
k
x
j
q
2.4 2.2
2
2
1.9 1.5
1
0.8 0.2 0.2 0.1
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

Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Trang 4

c
2.8
z
0.1


Bài tập môn : ATBMTT

Giáo viên : Phạm Văn Tho

B. 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)
{

Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Trang 5



Bài tập môn : ATBMTT

Giáo viên : Phạm Văn Tho

chuoi = chuoi.Trim();
int i;
while ((i = chuoi.IndexOf(" ")) > 0)
chuoi = chuoi.Remove(i, 1);
return (chuoi);
}

Phương thức mã hóa : dùng để mã hóa một chuỗi
public string Mahoa(string s, int k)
{
char[] banro = s.ToCharArray();
int chiso;
int l = banro.Length;
char[] tam = new char[l];
int[] so = new int[l];
for(int j =0; jfor (int i = 0; i < n; i++)
{
if (p[i] == banro[j])
{
so[j] = i;
chiso = (so[j] + k) % n;
tam[j] = p[chiso];
}
}

string banma = new string(tam); //
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[] banma = s.ToCharArray();
int chiso;
int l = banma.Length; // Chiều dài chuỗi cần giải mã
char[] tam = new char[l];
int[] so = new int[l];
for (int j = 0; j < l; j++)

Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Trang 6


Bài tập môn : ATBMTT

Giáo viên : Phạm Văn Tho

for (int i = 0; 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';
}

Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Trang 7


Bài tập môn : ATBMTT

Giáo viên : Phạm Văn Tho

}

4. Chi tiết chương trình
- Form mã hóa

- Form thám mã

Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Trang 8


Bài tập môn : ATBMTT

Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Giáo viên : Phạm Văn Tho


Trang 9


Bài tập môn : ATBMTT

Giáo viên : Phạm Văn Tho

KẾ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.

Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Trang 10



Bài tập môn : ATBMTT

Giáo viên : Phạm Văn Tho

MỤC LỤC
Nội dung:

----------HẾT----------

Nhóm 1 : Lê Duy Tuấn – Nguyễn Thanh Vin

Trang 11



×