Qua việc đi tìm hiểu nghiên cứu về các hệ mật mã, các phương pháp mã hóa, đặc biệt là thuật toán mã hóa cổ điển Vigenère em đã đi xây dựng chương trình minh họa ứng dụng thuật toán Vigenère trong các chuỗi tiếng Việt dạng Text.
Chương trình được xây dựng bằng ngôn ngữ C# trên môi trường Visual Studio 2010.
II. CHƯƠNG TRÌNH CÀI ĐẶT.
1. Giao diện chương trình.
Hình 5.1: Giao diện chính của chương trình.
Khi khởi động chương trình giao diện chương trình sẽ xuất hiện trên màn hình như hình 5.1.
Khi muốn mã hóa các phiên bản mã hóa này thì ta phải thực hiện như sau: + Gõ thông điệp cần mã hóa vào ô Nhập.Chú ý là chuỗi nhập chỉ đươc sử
dụng các ký tự chữ cái trong bảng alphabet.
+ Nhập khóa dùng để mã hóa vào ô Khóa.Lưu ý khóa dùng ở đây cũng phải dung các ký tự chữ cái trong bảng alphabet
+ Sau đó nhấn vào Mã hóa để mã hóa thông điệp đã gõ vào.
Hình 5.2 Giao diện chương trình khi đã nhập đủ thông tin cần mã hóa
Sau khi nhập đủ thông tin, thông điệp mã hóa sẽ được hiện ra ở ô ra sau khi bấm vào mã hóa, như hình 5.3.
Tương tự khi muốn giải mã các phiên bản mã hóa này thì ta phải thực hiện như sau:
+ Gõ thông điệp cần mã hóa vào ô Nhập.Chú ý là chuỗi nhập vào chỉ có các ký tự trong bảng alphabet.
+ Nhập khóa dùng để mã hóa vào ô Key. Lưu ý khóa dùng ở đây cũng có các ký tự chỉ nằm trong bản alphabet.
+ Sau đó nhấn vào nút giải mã để giải mã thông điệp đã gõ vào. Kết quả giải mã sẽ xuất hiện ở ô Ra của chương trình như hình 5.4.
Hình 5.4. Kết quả sau khi giải mã.
Ngoài ra, khi nhập key hay chuỗi cần mã hóa( giải mã) mà có ký tự không phải nằm trong bảng ký tự alphabet, chương trình sẽ tự loại bỏ.
Hình 5.5. Chương trình tự loại bỏ ký tự không đúng.
Khi nhâp ký tự trong Khóa không đúng hoàn toàn hoặc không điền khóa, chương trình sẽ tự báo lỗi:
Start Nhập Khóa Error Xây dựng ma trận Vigenère Thực hiện mã hóa / giải mã Ra End
3. Viết code chương trình.
Xử lý các ký tự nhập vào ô Nhập và ô Khóa:
string key = txtkey.Text.Trim().ToUpper(); string input1 = txtinput.Text.Trim().ToUpper(); StringBuilder input = new StringBuilder(); input = input.Append(input1);
for (int i = 0; i < input.Length; i++) { if (input[i] < 65 || input[i] > 90) { input.Remove(i, 1); i--; } }
StringBuilder key1 = new StringBuilder(); for (int i = 0; i < key.Length; i++)
{
key1.Append(key[i]); }
for (int i = 0; i < key1.Length; i++) { if (key1[i] < 65 || key1[i] > 90) { key1.Remove(i, 1); i--; } } if (key1.Length == 0) {
MessageBox.Show("Khóa nhập vào không đúng hoặc chưa nhập, xin hãy nhập lại"); }
Xây dựng ma trận Vigenère từ bảng chữ cái và chính khóa nhập vào: + Định nghĩa bảng chữ cái căn bản
StringBuilder C = new StringBuilder();
C = C.Append("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
+ Xây dựng lại bảng chữ cái theo khóa nhập
C = key1.Append(C);
for (int i = 0; i < C.Length; i++) {
for (int j = i + 1; j < C.Length; j++) { if (C[i] == C[j]) { C.Remove(j, 1); j--; } } }
+ Xây dựng ma trận Vigenère theo bảng chữ cái mới:
char[,] M = new char[26, 26];
for (int i = 0; i < C.Length; i++) {
M[0, i] = C[i]; }
for (int i = 1; i < 26; i++) {
for (int j = 0; j < 26; j++) M[i, j] = M[0, (j + i) % 26]; }
+ Xử lý mã hóa:
for (int i = 0; i < input.Length; i++) {
for (ii = 0; ii < 26; ii++) if (input[i] == M[0, ii]) { p = ii; break; } for (kk = 0; kk < 26; kk++) if (M[kk, 0] == key1[i]) { q = kk; break; } output.Append(M[q, p]); } + Xử lý giải mã:
StringBuilder output = new StringBuilder(); for (int i = 0; i < input.Length; i++)
{
for (ii = 0; ii < 26; ii++) if (key1[i] == M[ii, 0]) { p = ii; break; } for (kk = 0; kk < 26; kk++) if (input[i] == M[p, kk]) { q = kk; break; } output.Append(M[0, q]); } 4. Nhận xét, đánh giá, đề xuất: 4.1. Nhận xét, đánh giá
Sau quá trình nghiên cứu, thực hiện đồ án, em đã tìm hiểu và nắm được một số vấn đề như:
- Tìm hiểu về một số phương pháp mã hóa, một số thuật toán mã hóa cổ điển là nền tảng cho các loại mã hóa cao cấp được sử dụng hiện nay
- Nhìn chung đồ án chạy tốt, cho ra kết quả đúng như mong muốn. - Tuy nhiên chương trình mới dừng ở mức đơn giản.
4.2. Đề xuất
Do thời gian còn hạn chế và việc nghiên cứu chưa thật sâu nên còn có nhiều sai sót.
Em mong rằng có thêm thời gian để chỉnh sửa lại thêm để có thể hoàn thiện chương trình hơn.
Em xin cảm ơn thầy giáo hướng dẫn là thầy Nguyễn Nam Hưng đã dành thời gian và tâm huyết giúp đỡ em vượt qua những khúc mắc trong suốt quá trình làm đồ án Xin chân thành cảm ơn thầy cô và các bạn đã tạo điều kiện cho em thực hiện tốt đồ án.