資源描述:
《rsa加密算法設(shè)計》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、網(wǎng)絡(luò)安全作業(yè)題目RSA加密算法學(xué)號專業(yè)及班級網(wǎng)絡(luò)工程0902班姓名日期2012.04.14一、RSA簡介:RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導(dǎo)出解密密鑰在計算上是不可行的”密碼體制。二、RSA算法描述:RSA算法是一種非對稱密碼算法,所謂非對稱,就是指該算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。RSA的算法涉及三個參數(shù),n、e1、e2。其中,n是兩個大質(zhì)數(shù)p、q的積,n的二進制表示時所占用的位數(shù),就是所謂的密鑰長度。e1和e2是一對相關(guān)的值,e1可以任意取,但要求e1與
2、(p-1)*(q-1)互質(zhì);再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。(n及e1),(n及e2)就是密鑰對。RSA加解密的算法完全相同,設(shè)A為明文,B為密文,則:A=B^e1modn;B=A^e2modn;e1和e2可以互換使用,即:A=B^e2modn;B=A^e1modn;一、實現(xiàn)代碼:1.實現(xiàn)RSA算法類的定義:classCRsaA:publicCCmdTarget{DECLARE_DYNCREATE(CRsaA)CRsaA();//protectedconstructorusedbydynamiccreation//成員函
3、數(shù)private:voidInitInt(void);//基本數(shù)據(jù)常量的初始化intIntValid(byteintvalidtemp);//返回大validtemp的非零位的個數(shù)intIntCmp(byteintA,byteintB);//比較大數(shù)A和B是否相等//自定義類型的基本運算voidPlus(byteintA,byteintB,byteintC);//C=A+BvoidSubstract(byteintSA,byteintSB,byteintSC);//SC=SA-SBvoidMultiply(byteintA,byteintB,byteint
4、C);//C=A*BvoidSetMode(byteintA,byteintB,byteintC,byteintD);//C=A%BintPowerMode(byteintA,byteintC,byteintD,signedcharflag[400]);//computingA^BmodC-->DvoidIntRandom(byteintRandomA,intnum);//隨機產(chǎn)生一個大數(shù)voidLoadInt(byteintA,mtypeB);//將質(zhì)數(shù)類型轉(zhuǎn)換為大數(shù)類型voidTransBi(byteintB,signedcharflag[400])將
5、大數(shù)B轉(zhuǎn)換為二進制形式voidMdata();產(chǎn)生用于生成質(zhì)數(shù)中進行比較的數(shù)intPrime(byteintPrm);//產(chǎn)生一個長度為MLENGTH的質(zhì)數(shù)intComputingPK(byteintRvalue,byteintSK,byteintPK);//計算公鑰PKvoidComputingR(byteintp,byteintq,byteintR);//計算模值RvoidComputingRvalue(byteintp,byteintq,byteintRvalue);//計算$(r)voidIntCpy(byteintA1,byteintB1);//
6、將大數(shù)B1的值拷貝到大數(shù)A1中voidSetZero(byteintA);//將大數(shù)A清零CStringPrtInt(byteintA);//將一個大數(shù)類型轉(zhuǎn)換為一個CString類型intGetinput(byteintresult,CStringinput);//將字符串轉(zhuǎn)換為對應(yīng)的大數(shù)形式intGetinput1(byteintresult,unsignedlonginput);//將長整形數(shù)轉(zhuǎn)換為對應(yīng)的大數(shù)形式voidRsaDo(byteintsource,byteintR,byteintkey,byteintdesti);//實現(xiàn)加解密unsig
7、nedlongOs2ip(unsignedchar*pstr);CStringIp2os(CStringstr);public:voidGenKeys(CString&pk,CString&sk,CString&R);//提供給服務(wù)器使用的秘鑰產(chǎn)生函數(shù)intRsaEncrypt(CString&source,constchar*key,constchar*R,CStringArray&result);//加密CStringRsaDecrypt(CStringArray&source,constchar*sk,constchar*R);//解密voidGen
8、KeysTable();//生成秘鑰對文件voidLoadKeys