RSA加密算法VC++实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
//经过对大数运算库的算法进行初步优化,生成1024位密钥对所需时间由三分钟降志20秒以下 //看来tE!的RsaTools不是高不可攀的神话,何况俺用的是自己的大数运算库! //俺将进一步优化代码,直至RsaDemo比RsaTools还快! //代码变化祥见附件 基于以下原因,俺估计RSA算法会被越来越多的共享软件采用: 1、原理简洁易懂 2、加密强度高 3、专利限制已过期 4、看雪老大三番五次呼吁共享软件采用成熟的非对称加密技术 所以,大家应该对RSA算法进行深入了解。 俺写了一个简单易懂的大数运算库,并使用该库作了一个RSA Demo,大家可以使用这一 Demo生成真正随机的、各种长度的RSA 密钥对。其中生成1024位的RSA 密钥耗时不超过 五分钟,而对1024位以内的密文进行解密则不超过三秒钟,应该是可以接受的。 有一点需要说明的是,假如类似于这个Demo的RSA 工具被共享软件作者广泛用于注册码 的生成与验证,俺认为Cracker 们的日子就会过得很无趣了,唉! RSA 依赖大数运算,目前主流RSA 算法都建立在512 位到1024位的大数运算之上,所以 我们在现阶段首先需要掌握1024位的大数运算原理。 大多数的编译器只能支持到64位的整数运算,即我们在运算中所使用的整数必须小于等 于64位,即:0xffffffffffffffff,也就是18446744073709551615,这远远达不到RSA 的需要,于是需要专门建立大数运算库来解决这一问题。 最简单的办法是将大数当作字符串进行处理,也就是将大数用10进制字符数组进行表示, 然后模拟人们手工进行“竖式计算”的过程编写其加减乘除函数。但是这样做效率很低, 因为1024位的大数其10进制数字个数就有数百个,对于任何一种运算,都需要在两个有 数百个元素的数组空间上做多重循环,还需要许多额外的空间存放计算的进位退位标志 及中间结果。当然其优点是算法符合人们的日常习惯,易于理解。 另一种思路是将大数当作一个二进制流进行处理,使用各种移位和逻辑操作来进行加减 乘除运算,但是这样做代码设计非常复杂,可读性很低,难以理解也难以调试。 于是俺琢磨了一种介于两者之间的思路: 将大数看作一个n进制数组,对于目前的32位系统而言n可以取值为2的32次方,即0x100 00000,假如将一个1024位的大数转化成0进制,它就变成了32位,而每一位 的取值范围就不是0-1或0-9,而是0-0xffffffff。我们正好可以用一个无符号长整数来 表示这一数值。所以1024位的大数就是一个有32个元素的unsigned long数组。而且0x1制的数组排列与2 进制流对于计算机来说,实际上是一回事,但是我们完全 可以针对unsigned long 数组进行“竖式计算”,而循环规模被降低到了32次之内,并 且算法很容易理解。 例如大数18446744073709551615,等于“ffffffff ffffffff”,它就相当于10 进制的 “99”:有两位,每位都是ffffffff。而大数18446744073709551616,等于00000000,它就相当于10进制的“100”:有三位,第一位是1 ,其它两位 是0。如果我们要计算18446744073709551616-18446744073709551615,就类似于100-99: 00000000- ? ? ? ? ? ffffffff ffffffff ----------------------------- = ? ? ? ?0 ? ? ? ? 0 ? ? ? ?1 当然,因为在VC里面存在一个__int64类型可以用来计算进位与借位值,所以将大数当作 0x100000000进制进行运算是可能的,而在其他编译系统中如果不存在64位整形,则可以 采用0制,由于在0制中,对任何两个“数字”进行四则运算, 结果都在0x3fffffff*03fffffff之间,小于0xffffffff,都可以用一个32位无符号整数 来表示。 /****************************************************************/ //大数运算库头文件:BigInt.h //作者:afanty@ //版本:1.1 (2003.5.6) //说明:适用于MFC,1024位RSA运算 /****************************************************************/ /

文档评论(0)

小教资源库 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档