3、數(shù)d,使其滿足ed≡1modφ(n),即(de-1)modφ(n)=0,由此推出:ed=tφ(n)+1(t是大于等于1的正整數(shù));則將(p,q,d)作為私鑰。3.加密算法RAS加密消息m時(這里假設(shè)m是以十進制表示的),首先將消息分成大小合適的數(shù)據(jù)分組,然后對分組分別進行加密。每個分組的大小應(yīng)該比n小。設(shè)C為明文分組M加密后的密文,則加密公式為:C=M^emodn得到密文C。4.解密算法:對每一個密文分組進行如下運算M=C^dmodn得到明文M。如果竊密者獲得了n,e和密文C,為了破解密文必須計算出私鑰d,為
4、此需要先分解n,為了提高破解難度,達到更高的安全性,一般商業(yè)應(yīng)用要求n的長度不小于1024位,更重要的場合不小于2048位。使用RSATool2.14工具軟件實現(xiàn)操作步驟如下:1.打開RSA-Tool工具軟件窗口,如下圖1所示:圖12.在“NumberBase”組合框中選擇進制為10,如下圖2所示:圖23.單擊“Start”按鈕,然后隨意移動鼠標(biāo)直到提示信息框出現(xiàn),以獲取一個隨機數(shù)種子,如下圖3所示:圖34.在“KeySize(Bits)”編輯框中輸入32,如下圖4所示:圖41.單擊“Generate”按鈕生
5、成,如下圖5所示:圖56.復(fù)制“Prime(P)”編輯框中的內(nèi)容到“PublicExp.(E)”編輯框,如下圖6所示:圖67.在“NumberBase”組合框中選擇進制為16,如下圖7所示:圖78.記錄下“Prime(P)”編輯框中的十六進制文本內(nèi)容:BCF3。9.再次重復(fù)第2步。10.在“KeySize(Bits)”編輯框中輸入你所希望的密鑰位數(shù),從32到4096,位數(shù)越多安全性也高,但運算速度越慢,一般選擇1024位足夠了;單擊“Generate”按鈕生成,如下圖8,圖9所示:圖8圖911.單擊“Test
6、”按鈕測試,在“Messagetoencrypt”編輯框中隨意輸入一段文本,然后單擊“Encrypt”按鈕加密,再單擊“Decrypt”按鈕解密,看解密后的結(jié)果是否和所輸入的一致,如果一致表示所生成的RSA密鑰可用,否則需要重新生成,如圖10所示:圖1012.到此生成完成,“PrivateExp.(D)”編輯框中的內(nèi)容為私鑰如下圖11,第7步所記錄的內(nèi)容為公鑰(BCF3),“Modulus(N)”編輯框中的內(nèi)容為公共模數(shù)如下圖12,請將上述三段十六進制文本保存起來即可。圖11圖12使用代碼實現(xiàn):#includ
7、e#includeunsignedlongprime1,prime2,ee;unsignedlong*kzojld(unsignedlongp,unsignedlongq)//擴展歐幾里得算法求模逆{unsignedlongi=0,a=1,b=0,c=0,d=1,temp,mid,ni[2];mid=p;while(mid!=1){while(p>q){p=p-q;mid=p;i++;}a=c*(-1)*i+a;b=d*(-1)*i+b;temp=a;a=c;c=temp
8、;temp=b;b=d;d=temp;temp=p;p=q;q=temp;i=0;}ni[0]=c;ni[1]=d;return(ni);}unsignedlongmomi(unsignedlonga,unsignedlongb,unsignedlongp)//模冪算法{unsignedlongc;c=1;if(a>p)a=a%p;if(b>p)b=b%(p-1);while(b!=0){while