贾泽锋,崔梦天,王保琴,谢 琪,姜 玥
(1.西南民族大学计算机科学与技术学院,四川 成都 610041;2.陆军工程大学通信士官学校信息技术基础教研室,重庆 400035)
Java是大部分研发工程师爱好的一门语言,到目前为止它的使用率排名第一.Java之所以能有这样的成绩是因为它提供了很多功能模块,这使得开发过程中解决问题减少了时间.如Java在安全领域里就包含了在JCA[1]的基础上扩展出的Java加密扩展包JCE(Java Cryptography Extension),提供了DES算法、AES算法、RSA算法、DSA算法等各种加密算法、消息摘要算法和密钥管理等功能[2].利用Java API提供的安全机制很容易实现对称加密算法和非对称加密算法.本文主要对非对称加密算法在Java环境里的使用展开研究.
RSA加密算法是非对称加密算法里最为典型的加密算法,也是目前使用最广泛的非对称加密算法[3-4],它是可以应用在数据加密或者数字签名场景中[4].这里以甲乙双方传递信息为例[3],甲为消息发 送者,乙为消息接收者,如图1和图2所示:
图1 生成RSA算法密钥对Fig.1 Generate RSA algorithm key pair
图2 甲向乙传递RSA算法加密数据Fig.2 A passes RSA algorithm encrypted data to B
如图1所示,完成公开密钥的传送,就可以进行对数据加密进行发送并解密如图2所示.在非对称加密算法中,私钥加密的数据只能利用对应的公钥解密,简称“私钥加密,公钥解密”[3],那么按原理上在RSA加密算法里“公钥加密,私钥解密”这种方法也是成立的.这使得拿到公钥的一方能够利用公钥加密数据发送数据[3].如图3所示:
图3 乙向甲传递RSA算法加密数据Fig.3 B transmits RSA algorithm encryption data to A
如图3是乙(接收者)使用甲(发送者)发送的公钥加密数据,甲利用自身的私钥实现解密数据,称“公钥加密,私钥解密”[3].但是,这种方式不推荐使用,因为在公钥传递的过程中,公钥很可能被截获,截获到公钥者也有可能给甲方发送数据,这时甲方不能辨别真伪,因此,“公钥加密,私钥解密”这种形式存在必定的安全隐患[5].
RSA加密算法的数学原理是简单易懂.设密文为C,明文为E,则数据公式如下表达式:加密公式:C=ExmodN,则公钥为(x,N);解密公式:E = CdmodN,则私钥为(d,N)[6-10].其中mod是取余数.
下面我们举例模拟生成密钥对:
通过上面一系列求值最后得到:公钥(5,323),私钥(29,323).
关于Java API提供安全机制[11-12]的类详解如图4所示,本文通过用户注册与登录的实例,应用RSA算法在使用Java API实现对用户登录密码加密与解密的过程,进而体现出RSA算法在Java API中具体实现及使用[13].如图5~图9所示:
图4 RSA在Java API安全类图Fig.4 RSA in Java API Security Class Diagram
下面以用户注册与登录为例,具体流程如图5所示:
图5 注册与登录Fig.5 Registration and login
(1)生成RSA算法的公钥和私钥,如图6所示:
图6 生成RSA算法密钥对Fig.6 Generate RSA algorithm key pair
在得到公钥和私钥的时候通过BASE64Encoder转化生成字符串结果如图7所示:
图7 公钥与私钥结果图Fig.7 Public key and private key result graph
(2)得到公钥和私钥就可以进行对数据的加密与解密的工作,用户输入的密码data=“jiazefeng”为需要加密数据的数据,如图8和图9所示:
图8 公钥加密Fig.8 Public key encryption
图9 私钥解密Fig.9 Private key decryption
图8和图9中的data是代表需要加密与解密的数据,运行结果如图10所示:
图10 加密、解密结果图Fig.10 Encryption and decryption result graph
通过对RSA算法在JAVA API中的研究,可以应用在对个人信息的保密或者是企业的信息保密.因RSA算法利用一对密钥(公开密钥,私有密钥)来实现加密与解密,其操作简单,功能强大可以应用在对数据进行加密的任何场景下,RSA加密算法是目前最适合的一种加密算法,它被人们称为高级数据加密算法,通过这一特点完美有效的进行对数据加密,进而有效的保护数据安全.