基于c++builder的RSA算法的实现.docx

上传人:b****1 文档编号:643945 上传时间:2022-10-11 格式:DOCX 页数:25 大小:157.39KB
下载 相关 举报
基于c++builder的RSA算法的实现.docx_第1页
第1页 / 共25页
基于c++builder的RSA算法的实现.docx_第2页
第2页 / 共25页
基于c++builder的RSA算法的实现.docx_第3页
第3页 / 共25页
基于c++builder的RSA算法的实现.docx_第4页
第4页 / 共25页
基于c++builder的RSA算法的实现.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于c++builder的RSA算法的实现.docx

《基于c++builder的RSA算法的实现.docx》由会员分享,可在线阅读,更多相关《基于c++builder的RSA算法的实现.docx(25页珍藏版)》请在冰豆网上搜索。

基于c++builder的RSA算法的实现.docx

基于c++builder的RSA算法的实现

RSA算法的实现

摘要

本文设计的是一套完整实用的RSA文件加密解决方案,并具体编码实现。

本文采用费马小定理测试素数,使用Montgomery加快大数模乘运算,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。

在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。

经过加密的文件以及密钥文件都是文本文件。

本文首先给出关键类类图、整个应用程序的结构描述文档,然后对关键模块流程图、详细的接口文档进行阐述,并给出关键的实现代码,最后对应用程序进行测试,对测试结果进行分析研究,进而对应用程序进行改进,对关键算法进行尽可能的优化,最终得到一个在windows运行的可以用指定密钥对任意文件进行RSA加密并可解密的完整应用程序,和一些相关的可移植组件。

关键词:

RSA;文件加密;Montgomery;费马定理

 

ImplementofRSAAlgorithm

Abstract

Inthispaper,asolutionofencryptingfilewithRSAalgorithmandthecodesofthissystemareintroduced.Fermattheoryisusedtotestprimenumber.Montgomeryisusedtocutshortthetimeofmodularmultiplicationoflargenumber.TheclasslibraryofRSAisimplementedinC++,andpackagedtocomponentontheplatformof32bitswindows.Ontheplatformof.Net,theapplicationisimplementedwithreferenceofthiscomponentandcanencryptanyfilewithRSA.Bothencryptedfilesandkeyfilesaretextfiles.Inthispaper,coreclassfiguresandtheframeworkarefirstintroduced.Thentheflowofcoremodulesanddetailinterfacesarestatedandthekernelcodesareshowedalso.Finally,itanalyzestheresultoftest,thenoptimizescorealgorithm.Intheconclusion,anentireapplicationwhichcanencryptanyfileswithRSAalgorithmusinggivenkeyandsometransplantedcomponentsareimplemented.

Keywords:

RSA;FileEncryption;Montgomery;Fermat

目录

1引言1

1.1课题背景1

1.2RSA算法介绍与应用现状1

1.3RSA应用于文件加密的分析2

1.3.1文件加密使用RSA的可行性2

1.3.2文件加密使用RSA的意义3

2RSA文件加密软件的设计与实现4

2.1需求分析与总体设计4

2.1.1功能分析4

2.1.2工程方案选择4

2.2各部分的设计与开发5

2.2.1实现RSA加密算法的C++核心类库5

2.2.2封装C++核心类库的DLL组件25

2.2.3引用DLL的.Net类与实现文件操作功能的窗体应用程序26

3软件整体测试与分析改进27

3.1编写测试各项性能需要的精确计时类27

3.2测试数据与分析改进27

3.2.1密钥生成测试27

3.2.2数据输入输出测试28

3.2.3加密解密测试29

结论31

参考文献32

附录33

致谢34

声明35

1引言

1.1课题背景

RSA公钥加密算法是第一个既能用于数据加密也能用于数字签名的算法。

它易于理解和操作,也十分流行。

算法的名字以发明者的姓氏首字母命名:

RonRivest,AdiShamir和LeonardAdleman。

虽然自1978年提出以来,RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击,至今(2006年)未被完全攻破。

随着越来越多的商业应用和标准化工作,RSA已经成为最具代表性的公钥加密技术。

VISA、MasterCard、IBM、Microsoft等公司协力制定的安全电子交易标准(SecureElectronicTransactions,SET)就采用了标准RSA算法,这使得RSA在我们的生活中几乎无处不在。

网上交易加密连接、网上银行身份验证、各种信用卡使用的数字证书、智能移动电话和存储卡的验证功能芯片等,大多数使用RSA技术。

当今公钥加密更广泛应用于互联网身份认证,本课题将公钥加密算法RSA应用于小型文件加密。

将任意文件加密成文本的解决方案,使其使用更加灵活。

整个工程的分层设计,给引用移植和后续开发带来便利。

1.2RSA算法介绍与应用现状

RSA算法可以简单叙述如下:

<密钥生成>

取素数p,q,令n=p×q.

取与(p-1)×(q-1)互素的整数e,

由方程d×e=1(mod(p-1)×(q-1))解出d,

二元组(e,n)作为公开密钥,

二元组(d,n)作为私有密钥.

<加密解密>

b=aemodn,c=bdmodn.

附录中给出了证明a=c(modn).

RSA公开密钥加密算法自20世纪70年代提出以来,已经得到了广泛认可和应用。

发展至今,电子安全领域的各方面已经形成了较为完备的国际规范。

RSA作为最重要的公开密钥算法,在各领域的应用数不胜数。

RSA在硬件方面,以技术成熟的IC应用于各种消费类电子产品。

RSA在软件方面的应用,主要集中在Internet上。

加密连接、数字签名和数字证书的核心算法广泛使用RSA。

日常应用中,有比较著名的工具包OpenSSL(SSL,SecuritySocketLayer,是一个安全传输协议,在Internet上进行数据保护和身份确认。

OpenSSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的EricYang等发起编写的。

相关详细介绍见http:

//www.openssl.org/about/)。

OpenSSL应用RSA实现签名和密钥交换,已经在各种操作系统得到非常广泛的应用。

另外,家喻户晓的IE浏览器,自然也实现了SSL协议,集成了使用RSA技术的加密功能,结合MD5和SHA1,主要用于数字证书和数字签名,对于习惯于使用网上购物和网上银行的用户来说,几乎天天都在使用RSA技术。

1.3RSA应用于文件加密的分析

1.3.1文件加密使用RSA的可行性

通过1.2节的论述,不难看出RSA当今的应用多在于数字签名和证书等方面。

之所以只应用于这些短小数据的加密解密,是因为RSA算法加密极慢,速度是DES对称密钥加密速度的千分之一左右。

正是因为这样,把RSA应用于普通文件加密的想法一直被忽略。

通常文件被想象成大数据块,但是实际上在日常应用中,有些极其重要的文本资料是并不太大的,比如因担心遗忘而用普通文本记录的银行帐号和密码、不应被陌生人知道的重要电话号码、几千字节大的重要小图片等。

虽然RSA加密运算的速度十分慢,但是在PC性能越来越好的今天,对于几千字节的数据进行一次几百位密钥的RSA加密,所消耗的时间应该是可以接受的。

下面结合大数运算程序的调试,从理论上简单的分析消耗时间。

在一台普通配置的PC机上对一个整数进行幂模运算,因为公开密钥的e通常取的较小,所以指数取一个小整数,比如C353,模一个70字节长的整数(140位十六进制,大数单元以线性组方式实现,对应到RSA算法中,这相当于约560bit的n),调试一个函数测试,按初等数论中的知识对程序进行算法优化,最终在一台配置为AMDAthron2800+,外频333MHZ,物理内存512MB的PC上测试需要约45毫秒时间。

如果按这种速度,逐字节对1KB的数据进行同样的运算,所消耗的时间理论上为45毫秒的1024倍即约45秒。

这个时间并不是非常长。

其实从一个简单的角度来说,既然RSA用于数字签名可行,那就完全可以用于同样大小的普通文件。

对于较大的文件,如果分成与数字签名同样大小的段(这里假设数字签名较短,不分段一次计算加密完成),分开的各段逐一进行加密运算,那所需要的时间也只是按文件大小线性的增长。

通常数字签名为几十字节,加密运算并不需要很长的等待,这就说明对于几百字节或一两K字节大小的文件来说,如果进行RSA加密,并不会是非常漫长的工作。

当然,如果文件更大,加密就显得十分漫长了。

比如按前面叙述的45毫秒大数运算程序推理,加密1M字节大小的文件需要约1天的时间。

所以,要在普通PC用几百位以上的长密钥RSA加密文件,文件不能过大,一般可以接受的上限是几KB。

如果要在较短时间内加密大文件,需要缩短密钥长度以减小运算量,这将带来安全性隐患。

本文的第3章将根据实际调试好的软件,测试给出具体的时间消耗数据。

例如,在一台配置为AMDAthron2800+,外频333MHZ,物理内存512MB的PC上测试实现的软件,以560bit的n逐字节加密一个1KB大小的文件需要55秒。

通常记录如银行帐号密码等重要数据的文本文件大小不足百字节,加密只需要数秒钟。

所以对于小型文件,进行较长密钥的RSA加密是完全可行的。

1.3.2文件加密使用RSA的意义

如1.3.1节所述,小型文件加密可以使用RSA。

比如,因担心遗忘而用普通文本记录的银行帐号和密码、不应被陌生人知道的重要电话号码、几千字节大的重要小图片等。

可行的方法未必是必要的,本小节讨论何种文件适合用非对称密钥加密,即RSA加密文件的意义所在。

对于前面叙述的带有重要信息的小型文本和二进制数据的维护,①如果不加密,将无法放心的保存在计算机上,尤其是连网的或机房里的公共计算机。

②如果借助功能强大的大型多用户数据保护程序维护几个小型文件,显得十分烦琐,好比杀鸡用牛刀。

③如果采用对称密钥加密,即加密解密的密钥相同,只适合部分情况。

在某些情况下,使用对称密钥加密文件,交流使用不够方便。

比如,张三由于某种原因,需要将自己的某个文件在公共计算机上留给李四,而不希望别人看到内容。

如果采用对称密钥加密,张三和李四提前约好一个密码就可以。

但是如果张三想要在同一台公共计算机上再留一个秘密文件给王五,而不希望别人看到,就要和王五另外约定一个密码。

如果需要在这台公共计算机上留十个文件给不同的人,自己就要记和十个人约定好的密码,这样以来交流起来不够方便,因为对于张三,要自己维护太多的密钥。

非对称密钥(公开密钥方式)恰好解决这样的问题。

只要大家都在这台计算机或这台计算机可以访问到的地方,留下自己的公开密钥,一切就变的容易解决了。

张三要留给李四的文件,就用李四的公开密钥加密,要留给王五的文件,就用王五的公开密钥加密。

李四和王五只要把留给自己的文件用自己的私有密钥解密,就可以得到留给自己的文件了。

显然,非对称密钥体制更适合多用户交流,而将这种加密方式直接应用于文件加密,使我们在公开场合的交流更加灵活方便。

综上所述,使用前面叙述的方式加密文件有两点重要意义:

①应用非对称密钥加密任意文件,使非对称密钥的应用不仅仅局

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1