实验四RSA加解密算法的实现.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验四RSA加解密算法的实现 一.实验目的 1、 对算法描述可进行充分理解,精确理解算法的各个步骤。 2、 完成RSA软件算法的详细设计。 3、 用C++完成算法的设计模块。 4、 编制测试代码。 二?实验内容 1?实验原理及基本技术路线图(方框原理图) 加密过程: 第一步,用八首先输入两个素数P和q,并求出 n二P*q,然后再求出n的欧拉函数值phi。 第二步,在[e, phi]中选出一个与phi互素的整数e,并根据e*d =1 (mod phi),求出e的乘法逆 元。至此我们已经得到了公开密钥{e, n}和秘密密钥{d, n}o 第三步,让用户输入耍进行加密的小于n-?组正整数(个数不超过MXLENGTH二500),输入以-1为结 束标志,实际个数存入size中,正整数以clea讥MAXLENGTH]保存。 第四步,对第三步所得的明文c 1 ear [MAXLENGTH]进行加密。遍历clear[size],对每一个整数用以 下算法进行加密,并将加密后的密文保存在Ciphertext [MAXLENGTH]中。 count = e; while(count 0) 对明文进行加密 Ciphertext = (clear)亠 e mod n Ciphertext[j] = (Ciphertext[j] * clear[j]) % n; count一一 ; } 注意:此处不能用m2[j] = cleartj] * e整数的幕,因为当e和cleartj]较大时,会发生溢出, 至使出现无法预料的结果。 第五步,输出加密后的密文。 解密过程: 第一步,根据在以上算法中求出的解密密钥[d, phi],对加密后的密文Ciphertext [MAXLENGTH]进行 解密,结果保存在DecryptionText [MAXLENGTH]中,算法如下: int count; for(int j = 0; j size; j++) count = d; while(count 0) 对密文进行解密 DecryptionText = (Ciphertext)八 d (mod n) DecryptionText[j] = ((DecryptionText[j] * Ciphertext[j]) % n); count--; 第二步,输出对加密前的明文和加密并解密后的密文进行比较,判断两个数组是否一致,从而得知 算法是否正确。 2?所用仪器.材料(设备名称.型号.规格等) 计算机一台、vc6. 0 3.实验方法. #includelostream/ #includecmath using namespace std; ^define MAXLENGTH 500 //明文最人长度,即所允许最人整数个数 int size = 0;//保存要进彳亍加密的正整数的个数 int p, q; 〃两个大素数 int n, phi; //n 二 p * q, phi = (p-1) * (qT)是 n 的欧拉函数值 int e; //{e, n}为公开密钥 int d; //{d, n}为秘密密钥 int clear [MAXLENGTH], Ciphertext [MAXLENGTH];//分别用于存放加//密前的明//文和加密后的密文 int DecryptionText [MAXLENGTH];//存放解密后的明文 //////////////////////////////////////////////////////////// //以下为加密算法 voi d Encryption() {//加密算法 cout ? 〃请输入两个较大的素数:〃; cin ? p ? q ; cout ? /z p = p ? “,q = z, q endl; n 二 p * q;//求解 n, phi二(p - 1) * ( q - 1 ) ;//求解n的欧拉函数值 cout z/ n = n “,phi = phi endl; cout ? 请从[0, ? phi - 1 ? 中选择一个与? phi ? 互素的数e: cin e; float dO; for( int i 二 1; ; i++) {///求解乘法逆元e * d三1 (mod phi) dO = (float)(phi*i+l) / e; if( dO - (int)dO == 0 ) break; } d = (int)dO; cout ? endl; cout ? 〃 e 二 ” ? e ? “,d = z/ ? d ? endl; cout ? 公开密钥 Pk = {e, n} = { e ? n ? “ ? endl; cout ? 秘密密钥 Sk = {d,

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档