资源描述:
《RSA算法实验C++》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、实验目的通过编程实现RSA的加密和解密过程,加深对公钥(非对称)密码算法的认识。二、实验环境软件工具:VisualC++6.0操作系统:windowsxp三、实验思想公钥密码算法是指一个加密系统的加密密钥和解密密钥是不同的,或者说不能用其中一个推导出另一个。在公钥密码算法的两个密钥中,一个是用于加密的密钥,它是可以公开的,称为公钥;另一个是用于解密的密钥,是保密的,称为私钥。公钥密码算法解决了对称密码体制中密钥管理的难题,并提供了对信息发送人的身份进行验证的手段,是现代密码学最重要的发明。RSA密码体制是目前为止最成功的公钥密码算法,虽然
2、它的安全性还未能得到理论证明,但经过20多年的密码分析和攻击,迄今仍然被实践证明是安全的。RSA算法描述如下:1.公钥选择两个互异的大素数p和q,n是二者的乘积,即n二pq使D(n)=(p-1)(q-1),D(n)为欧拉函数。随机选取正整数e,使其满足gcd(e,(D(n))=1,即e和D(n)互质,则将(n,e)作为公钥。2.私钥求出正数d,使其满足ed=1modD(n),则将(p,q,d)作为私钥。3.加密算法对于明文M,由C=Memodn,得到密文C。4.解密算法对于密文C,由M=Cdmodn,得到明文M如果窃密者获得了n,e和密文C,
3、为了破解密文必须计算出私钥d,为此需要先分解n为了提高破解难度,达到更高的安全性,一般商业应用要求n的长度不小于1024位,更重要的场合不小于2048位。四、实验数据(源程序)#defineMAX100//数组的最大长度#defineMARK('0'-1)char*Addition(chara[],charb[]);//实现加法char*Substraction(chara[],charb[]);//实现减法,若a
4、chara[],charb[]);//实现除法,结果向下取整。如Division("13","3")="4"charDiv_per_bit(chara[],inta_l,charb[]);//实现按位除voidSub_per_bit(chara[],charb[],int*count);//实现按位减,初始条件为a>bchar*Mode(chara[],charb[],charc[]);//实现取余运算(a^b)modcvoiddjs(chars[]);//生成大奇数sintRabin_Miller_Test(chars[]);//素数检验算
5、法生成100位的奇数voiddjs(chars[]){//生成大奇数sinti,j;srand(time(NULL));//修改随机数种子j=rand()%10;while(j==0)j=rand()%10;s[0]=j+'0';//最高位不为0保证产生的随机数有MAX位while(fmod(j,2)==0)j=rand()%10;s[MAX-1]=j+'0';//最低位为奇数保证产生的随机数为奇数for(i=1;i