Top Ad unit 728 × 90

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 SP2Net 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ố




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;


Biểu mẫu liên hệ

Tên

Email *

Thông báo *

Được tạo bởi Blogger.