任彥燕
(太原理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,山西 太原 030024)
oracle數(shù)據(jù)庫(kù)中RSA算法的應(yīng)用
任彥燕
(太原理工大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,山西 太原 030024)
隨著計(jì)算機(jī)網(wǎng)絡(luò)和Internet的發(fā)展,全球信息化己成為人類社會(huì)發(fā)展的大趨勢(shì)。在今天的信息社會(huì)里,科學(xué)技術(shù)的研究和發(fā)展十分快速,數(shù)據(jù)安全保密問(wèn)題也日益突出。RSA作為非對(duì)稱加密算法,算法強(qiáng)度復(fù)雜、安全性依賴于算法與密鑰,能夠很好地將信息進(jìn)行加密。而人們通常對(duì)加密后的內(nèi)容摸不清頭緒,更直觀明白的是加密前的內(nèi)容,因此,解密工作很有必要。解密需要對(duì)應(yīng)相應(yīng)的解密算法,找到相應(yīng)的解密密鑰,并且在很短的時(shí)間內(nèi)將此工作完成,是十分困難的事情,而又快又準(zhǔn)進(jìn)行解密工作,更是難上加難,因此解密也是非常有技術(shù)含量的事情。
數(shù)據(jù)安全; RSA; 解密
oracle中對(duì)表中部分字段進(jìn)行RSA加密,將varchar數(shù)據(jù)轉(zhuǎn)化為二進(jìn)制數(shù)據(jù),再進(jìn)行數(shù)據(jù)的動(dòng)態(tài)加密,形成新的加密二進(jìn)制數(shù)據(jù)。
尋找DES加密的公鑰和私鑰,以及加密算法,根據(jù)相應(yīng)的加密算法書(shū)寫相應(yīng)的解密算法,對(duì)oracle加密字段進(jìn)行解密工程,最終將解密后的二進(jìn)制數(shù)據(jù)轉(zhuǎn)化為最初可以看懂的varchar數(shù)據(jù)進(jìn)行展示。
oracle中對(duì)表字段數(shù)據(jù)進(jìn)行數(shù)據(jù)轉(zhuǎn)化和加密,并調(diào)用java代碼對(duì)數(shù)據(jù)進(jìn)行RSA加密。
1) 確定加密公鑰,加密私鑰。
2) 使用RSA_ENCRYPT(UTL_I18N.STRING_TO_RAW(IN_STR, 'AL32UTF8'),PUBLIC_KEY,PRIVATE_KEY)加密算法,并對(duì)IN_STR字段用AL32UTF8進(jìn)行varchar到raw的數(shù)據(jù)轉(zhuǎn)化。
3) 加密算法的實(shí)現(xiàn)。
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')方法中調(diào)用了java中Encryptor類的.encrypt(byte[], java.lang.String, java.lang.String) 方法,進(jìn)行數(shù)據(jù)加密[1]。
Encryptor類的encrypt(byte[], java.lang.String, java.lang.String) 方法:
byte[]中的內(nèi)容是需要加密的字段,第一個(gè)java.lang.String代表加密公鑰,第二個(gè)java.lang.String代表加密私鑰。采用對(duì)數(shù)據(jù)庫(kù)中的單個(gè)字母進(jìn)行轉(zhuǎn)換,位移等方式,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行加密。
4) 解密算法的實(shí)現(xiàn)。
根據(jù)上述的加密算法,相反方向進(jìn)行解密。首先,先將加密后的內(nèi)容,調(diào)用java中Encryptor類的.decrypt(byte[], java.lang.String, java.lang.String) 方法,進(jìn)行數(shù)據(jù)解密。
Encryptor類的decrypt(byte[], java.lang.String, java.lang.String) 方法:
byte[]中的內(nèi)容是需要解密的字段,第一個(gè)java.lang.String代表解密公鑰,第二個(gè)java.lang.String代表解密私鑰。采用對(duì)數(shù)據(jù)庫(kù)中的單個(gè)字母進(jìn)行轉(zhuǎn)換,位移等方式,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行解密。并最終返回byte[]類型的數(shù)據(jù)。
得到byte[]類型的數(shù)據(jù)后,使用UTL_I18N.raw_to_char(ENCRYPTED_RAW, ’AL32UTF8’);方法,將byte[]類型的數(shù)據(jù)轉(zhuǎn)化為人們可以看懂的字符類型的數(shù)據(jù)。
1) oracle數(shù)據(jù)庫(kù)中數(shù)據(jù)加密后的結(jié)果。
圖1 加密數(shù)據(jù)圖
2) 將java程序引入到oracle數(shù)據(jù)庫(kù)中,如圖2所示。
圖2 程序引入圖
3) 將解密算法引入到oracle數(shù)據(jù)庫(kù)中
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[]’;
調(diào)用解密方法和使用相應(yīng)的公鑰和私鑰并對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行轉(zhuǎn)化:
CREATE OR REPLACE FUNCTION ryy_CHK_ENCRYPT(IN_STR RAW) RETURN VARCHAR2 IS
ENCRYPTED_RAW RAW(2000); --加密的二進(jìn)制文本
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的表中調(diào)用相應(yīng)的方法,對(duì)表中相應(yīng)的字段進(jìn)行解密:
select a.busi_id,ryy_CHK_ENCRYPT(a.encrypted_not_pass) from CHK_BUSI_RESULT_DET a
5) 解密后,獲得加密前的數(shù)據(jù)內(nèi)容,如圖3所示。
圖3 解密后數(shù)據(jù)圖
加密、解密,密切跟數(shù)據(jù)庫(kù)中的數(shù)據(jù)相關(guān),將java程序與oracle數(shù)據(jù)庫(kù)緊密結(jié)合,java代碼和sql語(yǔ)言合為一體,結(jié)合生產(chǎn)實(shí)踐,將理論的加解密應(yīng)用到現(xiàn)實(shí)數(shù)據(jù)中,達(dá)到一定的研究高度。且快速的,將加密數(shù)據(jù)進(jìn)行解密,高效的解決實(shí)際問(wèn)題是我們學(xué)習(xí)、工作中一直追求的目標(biāo)。
[1] 鞠宏偉,李鳳銀,禹繼國(guó),等.基于RSA的證實(shí)數(shù)字簽名方案[J].計(jì)算機(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- ),女,山西太原人,在讀碩士研究生,專業(yè)方向:軟件工程開(kāi)發(fā)與應(yīng)用。
1674- 4578(2017)06- 0066- 02
TP309.7
A