优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

.NET515 RSA算法的应用现状C++

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:


RSA公钥加密算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也十分流行。算法的名字以发明者的姓氏首字母命名:Ron Rivest, Adi Shamir 和Leonard Adleman。虽然自1978年提出以来,RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击,至今(2006年)未被完全攻破。随着越来越多的商业应用和标准化工作,RSA已经成为最具代表性的公钥加密技术。VISA、MasterCard、IBM、Microsoft等公司协力制定的安全电子交易标准(Secure Electronic Transactions,SET)就采用了标准RSA算法,这使得RSA在我们的生活中几乎无处不在。网上交易加密连接、网上银行身份验证、各种信用卡使用的数字证书、智能移动电话和存储卡的验证功能芯片等,大多数使用RSA技术。
当今公钥加密更广泛应用于互联网身份认证,本课题将公钥加密算法RSA应用于小型文件加密。将任意文件加密成文本的解决方案,使其使用更加灵活。整个工程的分层设计,给引用移植和后续开发带来便利。 内容来自think58 [版权所有:http://think58.com]


SA在软件方面的应用,主要集中在Internet上。加密连接、数字签名和数字证书的核心算法广泛使用RSA。日常应用中,有比较著名的工具包Open SSL(SSL,Security Socket Layer,是一个安全传输协议,在Internet上进行数据保护和身份确认。Open SSL是一个开放源代码的实现了SSL及相关加密技术的软件包,由加拿大的Eric Yang等发起编写的。相关详细介绍见http://www.openssl.org/about/ )。Open SSL应用RSA实现签名和密钥交换,已经在各种操作系统得到非常广泛的应用。另外,家喻户晓的IE浏览器,自然也实现了SSL协议,集成了使用RSA技术的加密功能,结合MD5和SHA1,主要用于数字证书和数字签名,对于习惯于使用网上购物和网上银行的用户来说,几乎天天都在使用RSA技术。
RSA更出现在要求高度安全稳定的企业级商务应用中。在当今的企业级商务应用中,不得不提及使用最广泛的平台j2ee。事实上,在j2se的标准库中,就为安全和加密服务提供了两组API:JCA和JCE。 JCA (Java Cryptography Architecture)提供基本的加密框架,如证书、数字签名、报文摘要和密钥对产生器; JCA由几个实现了基本的加

本文来自think58

[资料来源:http://www.THINK58.com]

[版权所有:http://think58.com]

整数进行幂模运算,因为公开密钥的e通常取的较小,所以指数取一个小整数,比如C353,模一个70字节长的整数(140位十六进制,大数单元以线性组方式实现,对应到RSA算法中,这相当于约560bit的n),调试一个函数测试,按初等数论中的知识对程序进行算法优化,最终在一台配置为AMD Athron2800+,外频333MHZ,物理内存512MB的PC上测试需要约45毫秒时间。如果按这种速度,逐字节对1KB的数据进行同样的运算,所消耗的时间理论上为45毫秒的1024倍即约45秒。这个时间并不是非常长。
其实从一个简单的角度来说,既然RSA用于数字签名可行,那就完全可以用于同样大小的普通文件。对于较大的文件,如果分成与数字签名同样大小的段(这里假设数字签名较短,不分段一次计算加密完成),分开的各段逐一进行加密运算,那所需要的时间也只是按文件大小线性的增长。通常数字签名为几十字节,加密运算并不需要很长的等待,这就说明对于几百字节或一两K字节大小的文件来说,如果进行RSA加密,并不会是非常漫长的工作。当然,如果文件更大,加密就显得十分漫长了。比如按前面叙述的45毫秒大数运算程序推理,加密1M字节大小的文件需要约1天的时间。所以,要在普通PC用几百位以上的长密钥RSA加密文件,文件不能过大,一般可以接受的上限是几KB。

think58.com

[资料来源:http://www.THINK58.com]

[版权所有:http://think58.com]

能,不需要从RSA算法出发进行编码。在j2se标准库中,javax.crypto中的Cipher类用于具体的加密和解密,java.security包直接提供了数字签名的相关方法。因为有强大的标准库支持,文件的读取和保存操作、各环节必要的数据编码转换、图形操作界面的实现也很简单(使用java.io java.awt或javax.swing 等包),如果结合一种快速开发的IDE,比如JBuilder,整个软件可以在很短的时间内编码完成。如果不考虑非PC设备和机器效率等问题,java平台几乎是最佳解决方案。但是缺点也很明显,如果想把核心算法和功能应用到非PC设备(例如嵌入式手持设备),则要求设备上有支持前面提及的加密类库的CVM;对于在PC上运行,JVM的数据运算速度要远远落后于本地化代码在PC上的运算速度,本软件需要进行大量运算,这一点不适合由java完成。
2. 整个工程使用.Net平台实现
与使用java平台完全类似,加密等有.Net基础类库的支持,不需要大量编码实现,另外由于Visual Studio的强大便利,这种规模的工程可以十分迅速的完成。缺点是只能在有微软.Net Framework的环境运行,在Windows操作系统,.Net Framework的机器效率好于java平台,但是相比于本地化的代码,还是十分拖沓的。

[资料来源:http://think58.com]

四则运算函数,并实现强制转换运算符unsigned,以方便大数类型和普通整数的互相赋值。当大数被强制转换为unsigned时,将取其最低四字节的值。四则运算实现的原理十分简单,都是按最基本的算术原理实现的,四则运算过程的本质就是按一定数制对数字的计算,比如相加,就是低位单元对齐,逐单元相加并进位,减法同理。而乘除法和取余也都是按照竖式运算的原理实现,并进行了必要的优化。虽然实现了四则运算函数,但是若是程序里的运算都要调用函数,显得烦琐而且看起来不美观,所以我们另写一个类vlong,关联(Associate,即使用vlong_value类型的对象或其指针作为成员)vlong_value,在vlong重载运算符。这样,当我们操作vlong大数对象的时候,就可以像使用一个简单类型一样使用各种运算符号了。之所以将vlong_value的指针作为成员而不是直接构造的对象,也是为了提高执行效率,因为大型对象的拷贝要消耗不少机器时间。
2. 大数幂模与乘模运算•Montgomery幂模算法
在实现了vlong类型后,大数的存储和四则运算的功能都完成了。考虑到RSA算法需要进行幂模运算,需要准备实现这些运算的方法。所以写一个vlong的友元,完成幂模运算功能。幂模运算是RSA 算法中比重最大的计算,最直接地决定了RSA 算法的性能,针对快速幂模运算这一课题,西方现代数学家提出了很多的解决方案。经查阅相关数学著作,发现通常都是依据乘模的性质 ,先将幂模运算化简为乘模运算。

[版权所有:http://think58.com]

在C#使用Windows kernel32.dll中的API实现精确计时的类源代码
 public class HighResolutionTimer
 {
  private long start;
  private long stop;
  private long frequency;
  public HighResolutionTimer()
  {
   QueryPerformanceFrequency (ref frequency);
  }
  public void Start ()
  {
   QueryPerformanceCounter (ref start);
  }
  public void Stop ()
  {
   QueryPerformanceCounter (ref stop);
  }
  public float ElapsedTime
  {
   get
   {
    float elapsed = (((float)(stop - start)) / ((float) frequency));
    return elapsed;
   }
  }
  [System.Runtime.InteropServices.DllImport("KERNEL32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto)]

[资料来源:THINK58.com]


  private static extern bool QueryPerformanceCounter(ref long performanceCount);
  [System.Runtime.InteropServices.DllImport("KERNEL32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto)]
  private static extern bool QueryPerformanceFrequency(ref long frequency);
 } copyright think58
[来源:http://think58.com]

加密解密测试时使用的两组密钥
密钥位数并不精确,可能有几位的差距。
512bit私有密钥(两行分别为d、n)
11C6EBA27BEA0A998C517D522DAE7ADA203F7325576C97853584C9253CD867B0FD6217579F8240F7FCB7474F1B532B8532794605C704D94513B240700BF04C9
195F9E4D3ABD729F6C7E7B7B6AF58DA89A10147DB6ADF0F4F3FA988E4C2441C2130C449852A68E19E32768FB3B41775DD4EF97F92674F3D21547249CD6D70C5
512bit公开密钥(两行分别为e、n)
C359
195F9E4D3ABD729F6C7E7B7B6AF58DA89A10147DB6ADF0F4F3FA988E4C2441C2130C449852A68E19E32768FB3B41775DD4EF97F92674F3D21547249CD6D70C5
1024bit私有密钥(两行分别为d、n)
79113601A430BCE489C6CBD825161014211DCC3D090D86C8F56E0F6324C0994A4E22596588C08B38354BA08C31DB6857BF919B8A67FDC0054A2C5BC783EEDEC3C1900A3AE66FAE1498562C6953FD9B7E0DD6EA515FE190D8123C31933328F79A5F1C63320499D09A4AC8F242E06F6BE903349570CE902197E6B24F3B8AB7D59
90640C3AA06DEC9ED00B8C232812B96F51979338282E782E8A10C5650D162781AC030747B0DEF22C42078036DDC6D42BC5728F5300CD6EDA1FFEC01D1F0B4FC06117BEC185E6429CA536D7BFB9B7235C6CC42A5C50C0C4798A04705212FC345170DEAB00A03E27D26292B7DE39F63874DC4FEB13DBE9C40B6DB9B593869EFD3 copyright think58

[资料来源:www.THINK58.com]

1024bit公开密钥(两行分别为e、n) think58好,好think58 [资料来源:THINK58.com]