oracle数据库中RSA算法的应用
2017-12-20任彦燕
任彦燕
(太原理工大学计算机科学与技术学院,山西 太原 030024)
oracle数据库中RSA算法的应用
任彦燕
(太原理工大学计算机科学与技术学院,山西 太原 030024)
随着计算机网络和Internet的发展,全球信息化己成为人类社会发展的大趋势。在今天的信息社会里,科学技术的研究和发展十分快速,数据安全保密问题也日益突出。RSA作为非对称加密算法,算法强度复杂、安全性依赖于算法与密钥,能够很好地将信息进行加密。而人们通常对加密后的内容摸不清头绪,更直观明白的是加密前的内容,因此,解密工作很有必要。解密需要对应相应的解密算法,找到相应的解密密钥,并且在很短的时间内将此工作完成,是十分困难的事情,而又快又准进行解密工作,更是难上加难,因此解密也是非常有技术含量的事情。
数据安全; RSA; 解密
1 加密描述
oracle中对表中部分字段进行RSA加密,将varchar数据转化为二进制数据,再进行数据的动态加密,形成新的加密二进制数据。
2 解决方案
寻找DES加密的公钥和私钥,以及加密算法,根据相应的加密算法书写相应的解密算法,对oracle加密字段进行解密工程,最终将解密后的二进制数据转化为最初可以看懂的varchar数据进行展示。
oracle中对表字段数据进行数据转化和加密,并调用java代码对数据进行RSA加密。
3 加解密过程描述
1) 确定加密公钥,加密私钥。
2) 使用RSA_ENCRYPT(UTL_I18N.STRING_TO_RAW(IN_STR, 'AL32UTF8'),PUBLIC_KEY,PRIVATE_KEY)加密算法,并对IN_STR字段用AL32UTF8进行varchar到raw的数据转化。
3) 加密算法的实现。
CREATE OR REPLACE FUNCTION RSA_ENCRYPT(SRC_DATA RAW, PUBLIC_KEY VARCHAR2, PRIVATE_KEY VARCHAR2) return RAW
as language java name 'Encryptor.encrypt(byte[], java.lang.String, java.lang.String) return byte[]’;
RSA_ENCRYPT(UTL_I18N.STRING_TO_RAW(IN_STR, 'AL32UTF8')方法中调用了java中Encryptor类的.encrypt(byte[], java.lang.String, java.lang.String) 方法,进行数据加密[1]。
Encryptor类的encrypt(byte[], java.lang.String, java.lang.String) 方法:
byte[]中的内容是需要加密的字段,第一个java.lang.String代表加密公钥,第二个java.lang.String代表加密私钥。采用对数据库中的单个字母进行转换,位移等方式,将数据库中的数据进行加密。
4) 解密算法的实现。
根据上述的加密算法,相反方向进行解密。首先,先将加密后的内容,调用java中Encryptor类的.decrypt(byte[], java.lang.String, java.lang.String) 方法,进行数据解密。
Encryptor类的decrypt(byte[], java.lang.String, java.lang.String) 方法:
byte[]中的内容是需要解密的字段,第一个java.lang.String代表解密公钥,第二个java.lang.String代表解密私钥。采用对数据库中的单个字母进行转换,位移等方式,将数据库中的数据进行解密。并最终返回byte[]类型的数据。
得到byte[]类型的数据后,使用UTL_I18N.raw_to_char(ENCRYPTED_RAW, ’AL32UTF8’);方法,将byte[]类型的数据转化为人们可以看懂的字符类型的数据。
4 oracle数据库中应用
1) oracle数据库中数据加密后的结果。
图1 加密数据图
2) 将java程序引入到oracle数据库中,如图2所示。
图2 程序引入图
3) 将解密算法引入到oracle数据库中
CREATE OR REPLACE FUNCTION ryy_RSA_ENCRYPT(SRC_DATA RAW, PUBLIC_KEY VARCHAR2, PRIVATE_KEY VARCHAR2) return RAW as language java name ’Test.decrypt(byte[], java.lang.String, java.lang.String) return byte[]’;
调用解密方法和使用相应的公钥和私钥并对二进制数据进行转化:
CREATE OR REPLACE FUNCTION ryy_CHK_ENCRYPT(IN_STR RAW) RETURN VARCHAR2 IS
ENCRYPTED_RAW RAW(2000); --加密的二进制文本
YUAN_ZIDUAN VARCHAR2(1000);
PUBLIC_KEY VARCHAR2(1000); --密钥
PRIVATE_KEY VARCHAR2(1000); --密钥
BEGIN
IF IN_STR IS NULL THEN
RETURN NULL;
END IF;
PUBLIC_KEY := ”;
PRIVATE_KEY :=”;
ENCRYPTED_RAW := RYY_RSA_ENCRYPT(IN_STR,PUBLIC_KEY,PRIVATE_KEY);
YUAN_ZIDUAN:=UTL_I18N.raw_to_char(ENCRYPTED_RAW, ’AL32UTF8’);
RETURN YUAN_ZIDUAN;
END;
4) 最终在oracle的表中调用相应的方法,对表中相应的字段进行解密:
select a.busi_id,ryy_CHK_ENCRYPT(a.encrypted_not_pass) from CHK_BUSI_RESULT_DET a
5) 解密后,获得加密前的数据内容,如图3所示。
图3 解密后数据图
5 本研究的亮点
加密、解密,密切跟数据库中的数据相关,将java程序与oracle数据库紧密结合,java代码和sql语言合为一体,结合生产实践,将理论的加解密应用到现实数据中,达到一定的研究高度。且快速的,将加密数据进行解密,高效的解决实际问题是我们学习、工作中一直追求的目标。
[1] 鞠宏伟,李凤银,禹继国,等.基于RSA的证实数字签名方案[J].计算机工程,2006,32(7):154-156.
ApplicationofRSAAlgorithminOracleDatabase
Ren Yanyan
(TaiyuanUniversityofTechnology,TaiyuanShanxi030024,China)
With the development of computer network and Internet, the global informatization has become the general trend of human society development. In today's information society, the research and development of science and technology is very fast, and the problem of data security and security is becoming increasingly prominent. RSA, as an asymmetric encryption algorithm, has complex strength and security. It relies on algorithms and keys that can encrypt the information well. People usually do not understand the encrypted content, and what is more intuitive is the content before encryption. Therefore, decryption is necessary. The corresponding decryption requires the corresponding decryption algorithm, finds the corresponding decryption key and this work should be completed in a very short period of time, so it is very difficult thing, and quickly and accurately to decrypt is even more difficult. Therefore, the decryption is also very technical matter.
data security; RSA; decryption
2017-10-13
任彦燕(1992- ),女,山西太原人,在读硕士研究生,专业方向:软件工程开发与应用。
1674- 4578(2017)06- 0066- 02
TP309.7
A