RSA加密算法_源代码__C语言实现.doc

RSA加密算法_源代码__C语言实现.doc

ID:50743449

大小:47.50 KB

页数:9页

时间:2020-03-14

RSA加密算法_源代码__C语言实现.doc_第1页
RSA加密算法_源代码__C语言实现.doc_第2页
RSA加密算法_源代码__C语言实现.doc_第3页
RSA加密算法_源代码__C语言实现.doc_第4页
RSA加密算法_源代码__C语言实现.doc_第5页
资源描述:

《RSA加密算法_源代码__C语言实现.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、RSA算法1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:RonRivest,AdiShamir和LeonardAdleman。但RSA的安全性一直未能得到理论上的证明。RSA的安全性依赖于大数难于分解这一特点。公钥和私钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。密钥对的产生。选择两个大素数,p和q。计算:n=p*q然后随机选择加密密钥e,要求e和(p-1)*(q-1)互质。最后,利用Euclid算法计算解密密钥d,满足e*d=1(

2、mod(p-1)*(q-1))其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。加密信息m(二进制表示)时,首先把m分成等长数据块m1,m2,...,mi,块长s,其中2^s<=n,s尽可能的大。对应的密文是:ci=mi^e(modn)(a)解密时作如下计算:mi=ci^d(modn)(b)RSA可用于数字签名,方案是用(a)式签名,(b)式验证。具体操作时考虑到安全性和m信息量较大等因素,一般是先作HASH运算。RSA的安全性。RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解RSA就一定需要作大

3、数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前,RSA的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解140多个十进制位的大素数。因此,模数n必须选大一些,因具体适用情况而定。由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。*/#include#include#include

4、AM_Tag{unsigned__int64p,q;//两个素数,不参与加密解密运算unsigned__int64f;//f=(p-1)*(q-1),不参与加密解密运算unsigned__int64n,e;//公匙,n=p*q,gcd(e,f)=1unsigned__int64d;//私匙,e*d=1(modf),gcd(n,d)=1unsigned__int64s;//块长,满足2^s<=n的最大的s,即log2(n)}RSA_PARAM;//小素数表conststaticlongg_PrimeTable[]={3,5,7,11,13,17,19,23,29,31,37,41,43,4

5、7,53,59,61,67,71,73,79,83,89,97};conststaticlongg_PrimeCount=sizeof(g_PrimeTable)/sizeof(long);constunsigned__int64multiplier=12747293821;constunsigned__int64adder=1343545677842234541;//随机数类classRandNumber{/**/private:unsigned__int64randSeed;/**/public:RandNumber(unsigned__int64s=0);unsigned__int

6、64Random(unsigned__int64n);};/**/RandNumber::RandNumber(unsigned__int64s){if(!s){randSeed=(unsigned__int64)time(NULL);}else{randSeed=s;}}/**/unsigned__int64RandNumber::Random(unsigned__int64n){randSeed=multiplier*randSeed+adder;returnrandSeed%n;}staticRandNumberg_Rnd;/*模乘运算,返回值x=a*bmodn*/inlineun

7、signed__int64MulMod(unsigned__int64a,unsigned__int64b,unsigned__int64n){returna*b%n;}/*模幂运算,返回值x=base^powmodn*/unsigned__int64PowMod(unsigned__int64&base,unsigned__int64&pow,unsigned__int64&n){unsigned__int64a=base,b=p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。