首页 > 范文大全 > 正文

非对称加密的JAVA与VC实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇非对称加密的JAVA与VC实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:该文主要研究非对称加密算法的javavc实现。随着网络化时代的到来,网络安全问题越来越引起人们的注意,而对网络安全的问题本文也进行了详细的描述,并找出几种安全机制来应对安全问题。该文重点介绍了非对称加密的应用,非对称加密中有很多对应的算法,其中RSA公钥加密算法是第一个既能用于数据加密也能用于数字签名的算法,并用JAVA与VC简单实现。

关键词:非对称加密;RSA算法;公钥;加密

中图分类号: TP309 文献标识码:A文章编号:1009-3044(2011)18-4306-02

随着计算机技术的普及,各种安全问题应用而生。计算机网络化时代的到来,更加引起人们对信息安全的重视。

网络安全成为现代社会安全问题的焦点,虽然有各种防火墙技术与反黑客技术的应用,但道高一尺魔高一丈,仍然有很多信息被黑客所窃取。这引起人们对加密技术的兴趣。其实加密有悠久的历史,古代人在没有高速运算设备的条件下想尽了各种办法来对信息进行保护。早在古埃及就有人在名文中嵌入非对称象形文字来实现加密的功能,据说这是最早的加密技术。随着人们有了高速计算机,对高速运算的要求已满足,人们于是研究出了各种加密算法。其中非对称加密就是比较完善的一种。

1 网络安全问题

现在对于网络安全技术已比较详细,其中有所对应的安全原则,包括保密性、鉴别、完整性、不可抵赖性、访问控制、可用性。其中保密性原则要求做到只有发送人和所有接受人才能访问消息内容。如果非法人员能够访问消息内容,则破坏了保密性原则。如果计算机A的用户向计算机B的用户发了一个消息,而另一个用户C访问这个消息,那么这就破坏了保密性原则。这种攻击成为截获。而我们采用的加密算法是为了防止产生截获攻击而被窃取者读取数据。

安全机制方面又包括四个方面:数据加密、认证、数字签名、消息摘要;其中数据加密是本设计研究的主要方向。而数据加密就是数据加密是防止为经授权的用户访问敏感信息的手段,这就是人们通常理解的安全措施,也是其他安全方法的基础。

数据加密就是考虑到用户可能试图旁路窃取的情况,如在通讯线路上窃听。对这样的威胁最有效的解决方法就是数据加密,即以加密格式存储和传输敏感数据。数据加密的术语有:明文,即原始的或未加密的数据。通过加密算法对其进行加密,加密算法的输入信息为明文和密钥;密文,明文加密后的格式,是加密算法的输出信息。加密算法是公开的,而密钥则是不公开的。密文,不应为无密钥的用户理解,用于数据的存储以及传输。一般的保密通信模型如图1。

2 非对称加密

加密是只有一个密钥,这相对来说是不安全的。假如密看到非对称加密,我们肯定能想到对称加密。对称钥在传输过程中被第三方获取,那么我们加的密钥就没有意义了。但是我们怎么把密钥送到对方手里呢?这个问题就是对称加密的缺憾。

与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥( publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。在公开密钥加密技术中,加密密钥与解密密钥是不一样的。加密者可以将加密密钥公开,成为公开密钥,而仍将解密密钥保密,作为秘密密钥。任何人如果想向其发送加密消息,都可以找到公开密钥,然而,以其加密的消息却必须用加密者自己保留的秘密密钥才能解密,别人只知道公开密钥,因而无法阅读该消息。如果想向另一个人发送加密消息,则可以先去找他的公开密钥(既然是公开的,因而往往不用与他本人作事先联系,甚至不必认识他),然后用此密钥加密我想发送的消息给他,除了他本人之外,别人是无法阅读这个消息的。简单流程图如图2。

3 RSA算法的介绍及实现

RSA算法是非对称加密中比较成熟的一个算法,本设计就是基于对RSA算法的实现来完成对非对称加密的认识和了解。

3.1 RSA算法的介绍

1978年就出现了这种算法,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:RonRivest,AdiShamir和LeonardAdleman。RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。

密钥对的产生:选择两个大素数,p和q。计算:

N=p*q然后随机选择加密密钥e,要求e和(p.1)+(q-1)互质。最后,利用Euclid算法计算解密密钥d,满足e*d=l(mod(p-l)*(q-l》

其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。加密信息m(二进制表示)时,首先把m分成等长数据块ml,m2,…,mi,块长s,其中2^s

对应的密文是:Ci=mi^e(modn)(a)

解密时作如下计算:mi=ci^d(modn)(b)

3.2 RSA算法的实现

RSA算法的普及性在JAVA中得到了体现,JAVA中定义了实现RSA算法的类函数,而用户可以对此直接调用而不必重新定义。本设计就此在JAVA中对各类的调用来实现了RSA算法,但仍有很多功能没能实现,只是对数字和字母进行加密,未能实现对汉字的加密解密,这是本设计的一个缺憾。

同时,为了加强对RSA算法的认识,本设计也用VC进行了设计,各种函数都是通过对RSA算法的理解来自定义的。但仍未能实现对汉字的加密,这是本设计有待优化的地方。

3.2.1 对JAVA中一些类的认识

KeyPairGenerator类:KeyPairGenerator是个引擎类,用于产生公钥和私钥对。所有密钥对的生成都从KeyPairGenerator开始。

KeyPair类:密钥对(公钥和私钥)的简单容器。它含有两个公用方法:一个用来返回公钥,另一个用来返回私钥:

public Private Keyget Private()

public Public Keyget Public()

RSAPrivateKey类:它指定RSA私钥,它含有以下方法:

public BigIntegerget Modulus()

public BigIntegerget Private Exponent()

这些方法将返回RSA模数n和组成RSA私钥的秘密指数d的值。

BigInteger类:一个无限大的整数。

RSAPrivateCrtKeySpec类:该类利用中国余数定理(CRT)信息值来指定RSA私钥。它含有以下方法:

public BigIntegerget Public Exponent()

public Big Integerget Prime P()

public BigIntegerget PtimeQ()

public Big Integerget Prime ExponentP()

public Big Integerget Prime ExponentQ()publicBigIntegergetCrtCoefficient0

RSAPulicKeySpec类:它指定了RSA公钥。它含有以下两个方法:

publicBigIntegergetModulus()

publicBiglntegergetPublicExponent()

这些方法将返回RSA模数n和组成RSA公钥的公有指数e的值。

3.2.2 对VC的函数定义及程序流程

longcifang(longn,longm);

此函数实现了对n的m次方;

inUudgePrime(unsignedintprime);

此函数实现了判断素数功能;

voidOverOneNum(unsignedintf,unsignedintmodel,unsignedints);

此函数实现了加密函数c1:=1m,、e(modn)与解密函数mi=ci^d(modn)。

程序流程如图3。

4 结束语

在非对称加密中,RSA算法是比较流行的一种,它以大数运算为基础进行大数分解。RSA算法的安全性较高,但产生密码速度太慢,相信随着对安全性要求的提高,人们会对RSA算法进行更一步的改造,使其更能满足人们的要求。

参考文献:

[1] 刘永亮,张卫红.数字校园中的数据交换平台设计[J].中国教育网络,2011(21):91-93.

[2] 平凡.基于工作流的自动化办公系统设计与应用[J].天津电大学报,2011(1):52-55.

[3] 明习凤,李连晖,张志秀.基于项目教学法的《电力电子技术与应用》教学改革初探[J].职业,2011(2):80

[4] 单康康,江肖强.混合加密机制降低计算复杂度[J].中国教育网络,2011(21):41-42.

注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文