1 / 22
文档名称:

rsa加密算法设计说明.doc

格式:doc   大小:100KB   页数:22页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

rsa加密算法设计说明.doc

上传人:hnet653 2020/9/29 文件大小:100 KB

下载得到文件列表

rsa加密算法设计说明.doc

相关文档

文档介绍

文档介绍::RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。RSA算法描述:RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。RSA的算法涉及三个参数,n、e1、e2。其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。(n及e1),(n及e2)就是密钥对。RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1modn;B=A^e2modn;e1和e2可以互换使用,即:A=B^e2modn;B=A^e1modn;实现代码::classCRsaA:mdTarget{DECLARE_DYNCREATE(CRsaA)CRsaA();//reation//成员函数private:voidInitInt(void);//基本数据常量的初始化intIntValid(byteintvalidtemp);//返回大validtemp的非零位的个数intIntCmp(byteintA,byteintB);//比较大数A和B是否相等 //自定义类型的基本运算voidPlus(byteintA,byteintB,byteintC);//C=A+BvoidSubstract(byteintSA,byteintSB,byteintSC);//SC=SA-SBvoidMultiply(byteintA,byteintB,byteintC);//C=A*BvoidSetMode(byteintA,byteintB,byteintC,byteintD);//C=A%BintPowerMode(byteintA,byteintC,byteintD,signedcharflag[400]);//computingA^BmodC-->D voidIntRandom(byteintRandomA,intnum);//随机产生一个大数voidLoadInt(byteintA,mtypeB);//将质数类型转换为大数类型voidTransBi(byteintB,signedcharflag[400])将大数B转换为二进制形式voidMdata();产生用于生成质数中进行比较的数intPrime(byteintPrm);//putingPK(byteintRvalue,byteintSK,byteintPK);//putingR(byteintp,byteintq,byteintR);//putingRvalue(byteintp,byteintq,byteintRvalue);//计算$(r)voidIntCpy(byteintA1,byteintB1);//将大数B1的值拷贝到大数A1中voidSetZero(byteintA);//将大数A清零CStringPrtInt(byteintA);//将一个大数类型转换为一个CString类型intGetinput(byteintresult,CStringinput);//将字符串转换为对应的大数形式intGetinput1(byteintresult,unsignedlonginput);//将长整形数转换为对应的大数形式voidRsaDo(byteintsource,byteintR,byteintkey,byteintdesti);//实现加解密 unsignedlongOs2ip(unsignedchar*pstr);CStringIp2os(CStringstr);public:voidGenKeys(CString&pk,CString&sk,CString&R);//提供给服务器使用的秘钥产生函数intRsaEncrypt(CString&source,constchar*key,constchar*R,CStringArray&result);//加密CStringRsaDecrypt(CStringArray&source,constchar*sk,constchar*R);//解密 voidGenKeysTable();//生成秘钥对文件 voidLoadKeysFromFile(CString&r,CString&sk,CString&pk);private: byteintONEVALUE; byteintZEROVALUE; bytei