任彥燕
(太原理工大學計算機科學與技術學院,山西 太原 030024)
oracle數據庫中RSA算法的應用
任彥燕
(太原理工大學計算機科學與技術學院,山西 太原 030024)
隨著計算機網絡和Internet的發(fā)展,全球信息化己成為人類社會發(fā)展的大趨勢。在今天的信息社會里,科學技術的研究和發(fā)展十分快速,數據安全保密問題也日益突出。RSA作為非對稱加密算法,算法強度復雜、安全性依賴于算法與密鑰,能夠很好地將信息進行加密。而人們通常對加密后的內容摸不清頭緒,更直觀明白的是加密前的內容,因此,解密工作很有必要。解密需要對應相應的解密算法,找到相應的解密密鑰,并且在很短的時間內將此工作完成,是十分困難的事情,而又快又準進行解密工作,更是難上加難,因此解密也是非常有技術含量的事情。
數據安全; RSA; 解密
oracle中對表中部分字段進行RSA加密,將varchar數據轉化為二進制數據,再進行數據的動態(tài)加密,形成新的加密二進制數據。
尋找DES加密的公鑰和私鑰,以及加密算法,根據相應的加密算法書寫相應的解密算法,對oracle加密字段進行解密工程,最終將解密后的二進制數據轉化為最初可以看懂的varchar數據進行展示。
oracle中對表字段數據進行數據轉化和加密,并調用java代碼對數據進行RSA加密。
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[]類型的數據轉化為人們可以看懂的字符類型的數據。
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 解密后數據圖
加密、解密,密切跟數據庫中的數據相關,將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- ),女,山西太原人,在讀碩士研究生,專業(yè)方向:軟件工程開發(fā)與應用。
1674- 4578(2017)06- 0066- 02
TP309.7
A