- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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,
您可能关注的文档
最近下载
- 第一单元《做学习的主人》大单元整体教学评一体化教学设计 2025道德与法治三年级上册.docx
- 入党志愿书空白表格_1831893502精品.doc VIP
- 三一汽车起重机STC1000C7-1_产品手册用户使用说明书技术参数图解图示电子版.pdf VIP
- 2025-2026学年高二物理上学期第一次月考卷(真题含答案解析).docx VIP
- 高中语文专题一沁园春长沙学案苏教版.doc VIP
- 《中国老年骨质疏松症诊疗指南(2024)》解读-.pptx VIP
- 门式钢架房屋技术规程2002.pdf
- 《2校园的树木我修剪》(教案)人民版劳动技术七年级上册.docx
- 报价单模板模板.docx VIP
- 意外事故调查表(标准范本).pdf VIP
文档评论(0)