Hệ Mã hóa RSA - An Toàn Dữ Liệu
yêu cầu về độ tin cậy và hiệu suất: Phải đáp ứng được đầy đủ các chức năng, đặc biệt là chức năng mã hóa và giải mã phải nhanh và chính xác.
Yêu cầu về môi trường: Phần mềm hoạt động trên môi trường từ Microsoft Windows XP SP2 và Net framework 2.0 trở lên.
Yêu cầu giao diện: Giao diện được trình bày khoa học, hợp lý và đảm bảo mỹ thuật hài hòa với mục đích của phần mềm, tuân thủ các chuẩn về truy cập thông tin.
Hệ Mã hóa RSA - An Toàn Dữ Liệu - he-ma-hoa-RSA-an-toan-du-lieu
» Hệ Mã Vigenere - An Toàn Dữ Liệu
» Đề thi Vi Xử Lý - Lập trình Vi Xử Lý năm 2013
» Bài toán tìm mảng con có trọng số lớn nhất trong C++
» Nhân hai sô nguyên lớn, Chia hai số nguyên lớn, Cộng hai số nguyên lớn, Trừ hai số nguyên lớn trong C++
» Xử Lý Tín Hiệu Số
Yêu cầu về môi trường: Phần mềm hoạt động trên môi trường từ Microsoft Windows XP SP2 và Net framework 2.0 trở lên.
Yêu cầu giao diện: Giao diện được trình bày khoa học, hợp lý và đảm bảo mỹ thuật hài hòa với mục đích của phần mềm, tuân thủ các chuẩn về truy cập thông tin.
» Hệ Mã Vigenere - An Toàn Dữ Liệu
» Đề thi Vi Xử Lý - Lập trình Vi Xử Lý năm 2013
» Bài toán tìm mảng con có trọng số lớn nhất trong C++
» Nhân hai sô nguyên lớn, Chia hai số nguyên lớn, Cộng hai số nguyên lớn, Trừ hai số nguyên lớn trong C++
» Xử Lý Tín Hiệu Số
Code một số hàm chính trong chương trình:
Hàm tạo số ngẫu nhiên p và q
private int soNgauNhien() { Random rd = new Random(); return rd.Next(80, 220); } |
Hàm kiểm tra p và q là số nguyên tố
#region "Hàm kiểm tra nguyên tố" private bool kiemTraNguyenTo(int i) { bool kiemtra = true; for (int j = 2; j < i; j++) if (i % j == 0) { kiemtra = false; break; } return kiemtra; } #endregion |
Hàm kiểm tra p và q là hai số nguyên tố cùng nhau
#region "Hàm kiểm tra hai số nguyên tố cùng nhau" private bool nguyenToCungNhau(int a, int b) { bool kiemtra = true; for (int i = 2; i <= a; i++) if (a % i == 0 && b % i == 0) kiemtra = false; return kiemtra; } #endregion |
Hàm lấy chuỗi từ mảng ra xâu |
#region "Lấy chuỗi từ mảng ra xâu S" public string chuoi(int[] a) { string s = ""; for (int i = 0; i < a.Length - 1; i++) { s = s + a[i].ToString() + "-"; } s = s + a[a.Length - 1].ToString(); return s; } #endregion |
Hàm tạo khóa tự động với p và q được lấy từ hàm tạo số ngẫu nhiên
#region "Hàm tạo khóa tự động" 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; } } |
Hàm lấy giá trị Mod
#region "Hàm lấy mod" public int mod(int m, int e, int n) { //Sử dụng thuật toán "bình phương nhân" //Chuyển e sang hệ nhị phân int[] a = new int[100]; int k = 0; do { a[k] = e % 2; k++; e = e / 2; } while (e != 0); //Quá trình lấy dư int kq = 1; for (int i = k - 1; i >= 0; i--) { kq = (kq * kq) % n; if (a[i] == 1) kq = (kq * m) % n; } return kq; #region |
Hàm mã hóa
#region "Hàm Mã hóa" public void MaHoa(string s) { taoKhoa(); // Chuyen xau thanh ma Unicode int[] nguyen = new int[s.Length]; for (int i = 0; i < s.Length; i++) { nguyen[i] = (int)s[i]; } txt_ma_ban_ro.Text = chuoi(nguyen); //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); } txt_ma_ban_ma.Text = chuoi(a); //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); txt_banma.Text = Convert.ToBase64String(data);} |
Hàm giải mã
#region "Hàm giải mã" public void GiaiMa(string s) { //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); } txt_ma_giai_ma.Text = chuoi(c); string str = ""; for (int i = 0; i < c.Length; i++) { str = str + (char)c[i]; } txt_giaima.Text = str; |