欢迎来到天天文库
浏览记录
ID:52718122
大小:174.00 KB
页数:5页
时间:2020-03-29
《实验四RSA加解密算法的实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验四RSA加解密算法的实现一.实验目的1、对算法描述可进行充分理解,精确理解算法的各个步骤。2、完成RSA软件算法的详细设计。3、用C++完成算法的设计模块。4、编制测试代码。二.实验内容1.实验原理及基本技术路线图<方框原理图)加密过程:第一步,用户首先输入两个素数p和q,并求出n=p*q,然后再求出n的欧拉函数值phi。第二步,在[e,phi]中选出一个与phi互素的整数e,并根据e*d≡12、超过MAXLENGTH=500),输入以-1为结束标志,实际个数存入size中,正整数以clear[MAXLENGTH]保存。p1EanqFDPw第四步,对第三步所得的明文clear[MAXLENGTH]进行加密。遍历clear[size],对每一个整数用以下算法进行加密,并将加密后的密文保存在Ciphertext[MAXLENGTH]中。DXDiTa9E3d注意:此处不能用m2[j]=clear[j]^e整数的幂,因为当e和clear[j]较大时,会发生溢出,至使出现无法预料的结果。RTCrpUDGiT第五步,输出加密后的密文。解密过程:第一步,根据在以上算法3、中求出的解密密钥[d,phi],对加密后的密文Ciphertext[MAXLENGTH]进行解密,结果保存在DecryptionText[MAXLENGTH]中,算法如下:5PCzVD7HxA第二步,输出对加密前的明文和加密并解密后的密文进行比较,判断两个数组是否一致,从而得知算法是否正确。2.所用仪器、材料<设备名称、型号、规格等)5/5计算机一台、vc6.03.实验方法、步骤#include#includeusingnamespacestd。#defineMAXLENGTH500//明文最大长度,即所允许最大整数个数ints4、ize=0。//保存要进行加密的正整数的个数intp,q。//两个大素数intn,phi。//n=p*q,phi=(p-1>*(q-1>是n的欧拉函数值jLBHrnAILginte。//{e,n}为公开密钥intd。//{d,n}为秘密密钥intclear[MAXLENGTH],Ciphertext[MAXLENGTH]。//分别用于存放加//密前的明//文和加密后的密文xHAQX74J0XintDecryptionText[MAXLENGTH]。//存放解密后的明文////////////////////////////////////////////////5、////////////LDAYtRyKfE//以下为加密算法voidEncryption(>{//加密算法cout<<"请输入两个较大的素数:"。cin>>p>>q。cout<<"p="<*(q-1>。//求解n的欧拉函数值cout<<"n="<>e。floatd0。for(inti=1。。i++>{///求解乘法逆6、元e*d≡1(modphi>d0=(float>(phi*i+1>/e。if(d0-(int>d0==0>break。}d=(int>d0。cout<7、cout<<"加密前的明文为:"。for(i=0。iCiphertext[i]=1。5/5intcount。for(intj=0。j{cin>>clear[j]。if(clear[j]==-1>break。count=e。while(count>0>{//对明文进行加密Ciphertext=%n。//加密算法count--。}}cout<<"密文为:"。size=j。//实际密文长度for(intk=08、。kcou
2、超过MAXLENGTH=500),输入以-1为结束标志,实际个数存入size中,正整数以clear[MAXLENGTH]保存。p1EanqFDPw第四步,对第三步所得的明文clear[MAXLENGTH]进行加密。遍历clear[size],对每一个整数用以下算法进行加密,并将加密后的密文保存在Ciphertext[MAXLENGTH]中。DXDiTa9E3d注意:此处不能用m2[j]=clear[j]^e整数的幂,因为当e和clear[j]较大时,会发生溢出,至使出现无法预料的结果。RTCrpUDGiT第五步,输出加密后的密文。解密过程:第一步,根据在以上算法
3、中求出的解密密钥[d,phi],对加密后的密文Ciphertext[MAXLENGTH]进行解密,结果保存在DecryptionText[MAXLENGTH]中,算法如下:5PCzVD7HxA第二步,输出对加密前的明文和加密并解密后的密文进行比较,判断两个数组是否一致,从而得知算法是否正确。2.所用仪器、材料<设备名称、型号、规格等)5/5计算机一台、vc6.03.实验方法、步骤#include#includeusingnamespacestd。#defineMAXLENGTH500//明文最大长度,即所允许最大整数个数ints
4、ize=0。//保存要进行加密的正整数的个数intp,q。//两个大素数intn,phi。//n=p*q,phi=(p-1>*(q-1>是n的欧拉函数值jLBHrnAILginte。//{e,n}为公开密钥intd。//{d,n}为秘密密钥intclear[MAXLENGTH],Ciphertext[MAXLENGTH]。//分别用于存放加//密前的明//文和加密后的密文xHAQX74J0XintDecryptionText[MAXLENGTH]。//存放解密后的明文////////////////////////////////////////////////
5、////////////LDAYtRyKfE//以下为加密算法voidEncryption(>{//加密算法cout<<"请输入两个较大的素数:"。cin>>p>>q。cout<<"p="<
*(q-1>。//求解n的欧拉函数值cout<<"n="<>e。floatd0。for(inti=1。。i++>{///求解乘法逆
6、元e*d≡1(modphi>d0=(float>(phi*i+1>/e。if(d0-(int>d0==0>break。}d=(int>d0。cout<7、cout<<"加密前的明文为:"。for(i=0。iCiphertext[i]=1。5/5intcount。for(intj=0。j{cin>>clear[j]。if(clear[j]==-1>break。count=e。while(count>0>{//对明文进行加密Ciphertext=%n。//加密算法count--。}}cout<<"密文为:"。size=j。//实际密文长度for(intk=08、。kcou
7、cout<<"加密前的明文为:"。for(i=0。iCiphertext[i]=1。5/5intcount。for(intj=0。j{cin>>clear[j]。if(clear[j]==-1>break。count=e。while(count>0>{//对明文进行加密Ciphertext=%n。//加密算法count--。}}cout<<"密文为:"。size=j。//实际密文长度for(intk=0
8、。kcou
此文档下载收益归作者所有