Mã chương trình

Một phần của tài liệu Tiểu luận môn toán học cho khoa học máy tính TÌM HIỂU CHỮ KÝ ĐIỆN TỬ XÂY DỰNG ỨNG DỤNG MÔ PHỎNG CHỮ KÝ ĐIỆN TỬ (Trang 39)

- Hàm tạo khóa

private void taoKhoa() {

//Tinh n=p*q n = p * q;

//Tính Phi(n)=(p-1)*(q-1) phi_n = (p - 1) * (q - 1);

//Tính e là một số ngẫu nhiên có giá trị 0< e <phi(n) và là số nguyên tố cùng nhau với Phi(n)

do {

Random rd = new Random(); e = rd.Next(2, phi_n);

}

while (!nguyenToCungNhau(e, phi_n)); txte.Text = Convert.ToString(e);

//Tính d d = 0;

int i = 2; while (((1 + i * phi_n) % e) != 0 || d <= 0) { i++; d = (1 + i * phi_n) / e; } } - Hashing MD5

o Input: chuỗi cần băm

o Output: mã băm

public string CreateMD5Hash(string input) {

try {

// Use input string to calculate MD5 hash

MD5 md5 = System.Security.Cryptography.MD5.Create(); byte[] inputBytes =

System.Text.Encoding.ASCII.GetBytes(input);

byte[] hashBytes = md5.ComputeHash(inputBytes); // Convert the byte array to hexadecimal string StringBuilder sb = new StringBuilder();

for (int i = 0; i < hashBytes.Length; i++) {

sb.Append(hashBytes[i].ToString("X2"));

// To force the hex string to lower-case letters instead of // upper-case, use he following line instead:

// sb.Append(hashBytes[i].ToString("x2")); }

return sb.ToString(); }

catch { return null; } }

- Hàm mã hóa RSA

o Input: Chuỗi băm

try {

// Chuyen xau thanh ma Unicode int[] nguyen = new int[s.Length]; for (int i = 0; i < s.Length; i++) {

nguyen[i] = (int)s[i]; }

//Mảng a chứa các kí tự đã mã hóa int[] a = new int[nguyen.Length]; for (int i = 0; i < nguyen.Length; i++) {

a[i] = mod(nguyen[i], e, n); }

//Chuyển sang kiểu kí tự trong bảng mã Unicode string str = "";

for (int i = 0; i < nguyen.Length; i++) {

str = str + (char)a[i]; }

byte[] data = Encoding.Unicode.GetBytes(str); return Convert.ToBase64String(data);

}

catch { return null; } }

- Hàm giải mã RSA

o Input: Chuỗi mã hóa

o Output: Chuỗi được giải mã

public string GiaiMa(string s) {

try {

//Lấy mã Unicode của từng kí tự mã hóa string giaima =

Encoding.Unicode.GetString(Convert.FromBase64String(s)); int[] b = new int[giaima.Length];

for (int i = 0; i < giaima.Length; i++) {

b[i] = (int)giaima[i]; }

//Giải mã

int[] c = new int[b.Length]; for (int i = 0; i < c.Length; i++) {

c[i] = mod(b[i], d, n); }

string str = "";

for (int i = 0; i < c.Length; i++) {

str = str + (char)c[i]; }

return str; }

catch { return null; } }

KẾT LUẬN

Em đã cố gắng truyền tải những gì thu hoạch được về vấn đề mã hóa, áp dụng giải thuật RSA vào chữ ký điện tử, dựa vào cơ sở lý thuyết để viết một ứng dụng mô phỏng quá trình tạo chữ ký điện tử và kiểm tra tính hợp lệ của chữ ký điện tử. Tuy đã cố gắng nhưng do thời gian ngắn nên bài thu hoạch chỉ đáp ứng được cơ bản về mặt lý thuyết và sử dụng dụng ngôn ngữ C# để viết một ứng dụng nhỏ mô phỏng chữ ký điện tử. Nếu có thời gian nhiều hơn em tin mình sẽ làm tốt hơn nữa, phát triển lên để áp dụng vào thực tế đời sống.

TÀI LIỆU THAM KHẢO

1. Bài giảng môn học “Toán cho máy tính” – PGS.TS. Đỗ Văn Nhơn

2. Giáo trình “An toàn và bảo mật thông tin” – Trường ĐH Hàng Hải 2008

3. Trang web http://vi.wikipedia.org/wiki/RSA_(m%C3%A3_h%C3%B3a)

4. Trang web http://vi.wikipedia.org/wiki/L%C3%BD_thuy%E1%BA%BFt_m%C3%A3_h%C3%B3a %C3%A3_h%C3%B3a

5. Trang web http://vi.wikipedia.org/wiki/MD5

6. Trang web http://vi.wikipedia.org/wiki/Ch%E1%BB%AF_k%C3%BD_%C4%91i%E1%BB%87n_t%E1%BB%AD %E1%BB%87n_t%E1%BB%AD

Một phần của tài liệu Tiểu luận môn toán học cho khoa học máy tính TÌM HIỂU CHỮ KÝ ĐIỆN TỬ XÂY DỰNG ỨNG DỤNG MÔ PHỎNG CHỮ KÝ ĐIỆN TỬ (Trang 39)