private void RSA_taoKhoa() { //Tinh n=p*q RSA_soN = RSA_soP * RSA_soQ; soN.Text = RSA_soN.ToString(); //Tính Phi(n)=(p-1)*(q-1) RSA_soPhi_n = (RSA_soP - 1) * (RSA_soQ - 1); soPhiN.Text = RSA_soPhi_n.ToString(); //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 { if (soE.Text == "") { Random RSA_rd = new Random(); RSA_soE = RSA_rd.Next(2, RSA_soPhi_n); } else { RSA_soE = int.Parse(soE.Text); } }while (!nguyenToCungNhau(RSA_soE, RSA_soPhi_n)); soE.Text = RSA_soE.ToString(); //Tính d là nghịch đảo modular của e RSA_soD = 0; int i = 2; while (((1 + i * RSA_soPhi_n) % RSA_soE) != 0 || RSA_soD <= 0) { i++; RSA_soD = (1 + i * RSA_soPhi_n) / RSA_soE; } soD.Text = RSA_soD.ToString(); }
private void F_rsa_TaoKhoa_Click(object sender, RoutedEventArgs e) { btChonFileKy_RSA.IsEnabled = btChonFileKy_RSA.IsEnabled = btChonFileXacThuc_RSA.IsEnabled = btChonFileXacThuc_RSA.IsEnabled = true; F_reset_(); RSA_soP = RSA_soQ = 0; do { RSA_soP = RSA_ChonSoNgauNhien(); RSA_soQ = RSA_ChonSoNgauNhien(); }while (RSA_soP == RSA_soQ || !RSA_kiemTraNguyenTo(RSA_soP) || !RSA_kiemTraNguyenTo(RSA_soQ)); F_rsa_soP.Text = RSA_soP.ToString(); F_rsa_soQ.Text = RSA_soQ.ToString(); F_TaoKhoa(); F_rsa_soPhiN.Text = RSA_soPhi_n.ToString(); F_rsa_soE.Text = RSA_soE.ToString(); F_rsa_soD.Text = RSA_soD.ToString(); F_rsa_soN.Text = RSA_soN.ToString(); F_rsa_d_dau = 1; F_rsa_TaoKhoa.IsEnabled = false; }