RSA加密算法

RSA加密算法概述

       RSA算法是一种经典的非对称加密算法,密钥一般由三个数字构成:N、E、D。对于一些信息,我们总有办法将其转化为数字,设该数字为X,对应的密文是Y。则对X的加密算法是:Y=XN mod E,解密算法是:X=YN mod D。

       由此看出,若甲要向乙发信息,只需要知道N和E就能加密信息,乙仅用N和D就能解密。一般在这种情况下,乙会生成N、E、D三个数字,然后通过一般的信息传输方式将N和E发给甲(由于窃听者并不能得到D,所以届时ta不能解密甲到时候要给乙发送到密文)。这样便解决了对称密码算法的密钥在传输中可能造成的密钥泄露问题。

如何生成密钥

       1.取两个质数P、Q。则N = P * Q。

        2.求(P-1),(Q-1)的最小公倍数L。

        3.E与L是互质的关系,由此便可以求出一个E。

        4.(E * D)mod L = 1,由此关系可以得到唯一D。

C语言生成密钥的代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 //函数功能:求最大公约数 
 5 int gcd(int m,int n)
 6 {
 7     int c;
 8     while(n != 0) 
 9     {
10         c = m % n;
11         m = n;
12         n = c;
13     }
14     return m;
15 }
16 
17 //函数功能:求最小公倍数 
18 int lcm(int m,int n)
19 {
20     int c,a;
21     a = m * n;
22     while(n != 0) 
23     {
24         c = m % n;
25         m = n;
26         n = c;
27     }
28     return a / m;
29 }
30 
31 int main()
32 {
33     int p,q;
34     int N,L,E,D;
35     int count;
36     printf("请输入两个质数:"); 
37     scanf("%d,%d",&p,&q); 
38     
39     N = p * q;
40     printf("N = %d\n",N);
41     
42     L = lcm((p - 1),(q - 1));    
43     
44     printf("可供选择的E值如下:\n");
45     for(E = 2;E < L;E++)
46     {
47         if(gcd(E,L) == 1)    printf("%d ",E);
48         if(E == L - 1)    printf("\n");
49     }
50     printf("请输入你想要的E值:");
51     scanf("%d",&E);
52     
53     printf("D值:");
54     for(D = 2;D < L;D++)
55     {
56         if((E * D) % L == 1)    printf("%d\n",D);
57     }
58     
59     system("pause");
60     return 0;    
61 }

结果如下图:

 

posted @ 2022-11-06 17:07  烟火-人间  阅读(168)  评论(0编辑  收藏  举报