- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RSA算法C实现
RSA算法的C++实现RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。?它的安全性是基于大整数素因子分解的困难性,而大整数因子分解问题是数学上的著名难题,至今没有有效的方法予以解决,因此可以确保RSA算法的安全性。RSA算法是第一个既能用于数据加密也能用于数字签名的算法,因此它为公用网络上信息的加密和鉴别提供了一种基本的方法。它通常是先生成一对RSA 密钥,其中之一是必威体育官网网址密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册,人们用公钥加密文件发送给个人,个人就可以用私钥解密接受。为提高必威体育官网网址强度,RSA密钥至少为500位长,一般推荐使用1024位。RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n及e1),(n及e2)就是密钥对。
RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;
e1和e2可以互换使用,即:
A=B^e2 mod n;B=A^e1 mod n;1) 确定密钥的宽度。????2) 随机选择两个不同的素数p处q,它们的宽度是密钥宽度的二分之一。????3) 计算出p和q的乘积n 。????4) 在2和Φ(n)之间随机选择一个数e , e 必须和Φ(n)互素,整数e用做加密密钥(其中Φ(n)=(p-1)*(q-1))。????5) 从公式ed ≡ 1 mod Φ(n)中求出解密密钥d 。????6) 得公钥(e ,n ), 私钥 (d , n) 。????7) 公开公钥,但不公开私钥。????8) 将明文P (假设P是一个小于n的整数)加密为密文C,计算方法为:
C = Pe?mod n
????9) 将密文C解密为明文P,计算方法为:
P = Cd?mod n
????然而只根据n和e(不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密 密钥产生key_produce.h?//==本程序提供密钥产生的一些基本数学实现#include?class CKEY_PRODUCE?{public:?CKEY_PRODUCE();?virtual ~CKEY_PRODUCE();public:?int JudgePrime(unsigned int prime);//==========判prime是否为素数?//============================================算出p*q的欧拉值?int Count_N_AoLa_Num(unsigned int p, unsigned int q, unsigned int * ao_la);?//============================================求两个数的最大公因数?unsigned int CountCommonData(unsigned int a, unsigned int b);?//=============================================随机选择公钥e?int RandSelect_e( unsigned int ao_la, unsigned int* e );?//=============================================求b的e次方除d的余数?unsigned int GetOutNum(unsigned int b,unsigned int e , unsigned int d);?//=============================================求任意大于2的整数的欧拉值?unsigned int CountAnyNumAola(unsigned int number);?//=============================================产生RSA 公_私?密钥int Produce_RSA_Key
您可能关注的文档
- 2015届《优化方案》高考生物(苏教版)一轮课后达标检测19基因控制蛋白质合成.doc
- 2015届《优化方案》高考生物(苏教版)一轮课后达标检测06细胞类型和结构(二)细胞质和细胞器生物膜.doc
- 2014确定版V5.0__浅析IC卡电梯管理系统与普通门禁系统区别及安全问题分析.doc
- 2015年湖北武汉事业单位教师岗面试培训辅导高中化学说课稿《最简单有机物甲烷》.doc
- 20世纪干嘉考据学成因研究及存在问题.doc
- 21671e7e0c5f4c6b84175488782b2734变差函数分析改进方案20080428.doc
- 21世纪管理挑战.doc
- 22.1 平行四边形性质.doc
- 26个提升java性能需要注意地方.doc
- 26页商业银行经营管理.doc
文档评论(0)