- 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
您可能关注的文档
- RedHatEnterpriseLinux5企業级Linux服务器的搭建与测试.doc
- RestGroup創新时代网供稿品牌设计.doc
- revit與TArch联手创建phoenics模型.doc
- RFID中間件软件在RFID系统中的功能和作用.doc
- RFC896TCPIP互聯网上的拥塞控制.doc
- RFID基礎知识.doc
- RFID在智能交通管理中的應用.doc
- RFID應用架构规划指南.doc
- RFID卡個案研究报告(保证您能看懂).doc
- RFID打卡器和射頻卡设计.doc
- 2024年中国钽材市场调查研究报告.docx
- 2024年中国不锈钢清洗车市场调查研究报告.docx
- 2024年中国分类垃圾箱市场调查研究报告.docx
- 2024年中国水气电磁阀市场调查研究报告.docx
- 2024年中国绿藻片市场调查研究报告.docx
- 2010-2023历年初中毕业升学考试(青海西宁卷)数学(带解析).docx
- 2010-2023历年福建厦门高一下学期质量检测地理卷.docx
- 2010-2023历年初中数学单元提优测试卷公式法(带解析).docx
- 2010-2023历年初中毕业升学考试(山东德州卷)化学(带解析).docx
- 2010-2023历年初中毕业升学考试(四川省泸州卷)化学(带解析).docx
文档评论(0)