- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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次方,即0x10000000,假如将一个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运算/****************************************************************/
/
您可能关注的文档
最近下载
- TSCIA 003-2021 陕西省市政基础设施工程施工技术文件管理规程.pdf VIP
- NF5280M6_可靠性预计报告.pdf VIP
- 便道施工技术交底111.doc VIP
- 第四版(2025)国际压力性损伤溃疡预防和治疗临床指南解读PPT课件.pptx VIP
- 木工家具做法.docx VIP
- 人工智能赋能初中教学评价体系改革研究.pdf VIP
- 专题09 三角函数拆角与恒等变形归类(原卷版)备考2025高考数学一轮知识清单.pdf VIP
- 小学课间活动中的趣味数学游戏设计与应用研究教学研究课题报告.docx
- 2023年华为HCIE数通(H12-891)认证培训考试题库大全-下(判断、填空、简答题).pdf VIP
- 外研版(三起)五年级下册英语期末测试题(含答案).docx VIP
文档评论(0)