p=17,q=31,e=7,M=2使用RSA算法进行加密和解密。 加密运算 c=me(mod n) 
解密运算 m=cd(mod n) (1) 选择素数:p=17,q=31。 
(2) 计算n=pq=17*31=527。 
(3) 计算Q(n)=(p-1)(q-1)=16*30=480 
(4) 选择e: gcd(e,480)=1; 选择e=7。 这个素数是取7吗? 
(5) 确定d: de=1 mod 480 且 d <480, 可选择d= ? 
(6) 公钥KU=(e,n) 
(7) 私钥KR=(d,n) 请帮我看看前3步算的对不对? 
第4和5步我不明白,请帮我讲讲怎么取? 
6和7步套用公式,如果前面的数都出来我就知道是多少了。 谢谢

解决方案 »

  1.   

    看着就迷糊啊,
    这个论坛专门做这个的,他们会乐意回答你的问题
    http://bbs.pediy.com/
      

  2.   

    <一>基础RSA算法非常简单,概述如下:
    找两素数p和q
    取n=p*q
    取t=(p-1)*(q-1)
    取任何一个数e,要求满足e<t并且e与t互素(就是最大公因数为1)
    取d*e%t==1这样最终得到三个数: n   d   e设消息为数M (M <n)
    设c=(M**d)%n就得到了加密后的消息c 
    设m=(c**e)%n则 m == M,从而完成对c的解密。
    注:**表示次方,上面两式中的d和e可以互换。在对称加密中:
    n d两个数构成公钥,可以告诉别人;
    n e两个数构成私钥,e自己保留,不让任何人知道。
    给别人发送的信息使用e加密,只要别人能用d解开就证明信息是由你发送的,构成了签名机制。
    别人给你发送信息时使用d加密,这样只有拥有e的你能够对其解密。rsa的安全性在于对于一个大数n,没有有效的方法能够将其分解
    从而在已知n d的情况下无法获得e;同样在已知n e的情况下无法
    求得d。<二>实践接下来我们来一个实践,看看实际的操作:
    找两个素数:
    p=47
    q=59
    这样
    n=p*q=2773
    t=(p-1)*(q-1)=2668
    取e=63,满足e<t并且e和t互素
    用perl简单穷举可以获得满主 e*d%t ==1的数d:
    C:\Temp>perl -e "foreach $i (1..9999){ print($i),last if $i*63%2668==1 }"
    847
    即d=847最终我们获得关键的
    n=2773
    d=847
    e=63取消息M=244我们看看加密:c=M**d%n = 244**847%2773
    用perl的大数计算来算一下:
    C:\Temp>perl -Mbigint -e "print 244**847%2773"
    465
    即用d对M加密后获得加密信息c=465解密:我们可以用e来对加密后的c进行解密,还原M:
    m=c**e%n=465**63%2773 :
    C:\Temp>perl -Mbigint -e "print 465**63%2773"
    244
    即用e对c解密后获得m=244 , 该值和原始信息M相等。
      

  3.   

    OK啦,我自己算出来了,谢谢
    p=17,q=31,e=7,M=2使用RSA算法进行加密和解密。
    1、选择素数:p=17,q=31。         
    2、计算n=pq=17*31=527。        
    3、计算Q(n)=(p-1)(q-1)=16*30=480  
    4、选择e: gcd(e,480)=1; 选择e=13。           
    5、确定d: de=1 mod 480 且 d<480, 可选择d=37  
    6、公钥KU={13,527}              
    7、私钥KR={37,527}
    加密:C=2^13 mod 527 = 287
    解密:M=287^37 mod 527 = 2