oracle 加密 解密 des

OracleDatabaseDES加密與解密

湯菀鈺 2016/11/22 20:44:09
2631







主題

OracleDatabaseDES加密與解密

文章簡介:

Oracledbms_obfuscation_toolkitDES加密和解密

作者:

湯菀鈺

版本/產出日期

V1.0/2016.11.17




1. 前言


在不使用其他 JAVA,C語言,PHP。。。。等程式技術下,想以純SQL語法進行資料加解密,可以使用Oracle DBMS_OBFUSCATION_TOOLKIT package套件的加解密功能



2. 目的


使Oracle DBMS_OBFUSCATION_TOOLKIT package, 對數據進行DES,Triple DES加解密



3. DES 加密


DBMS_OBFUSCATION_TOOLKIT.DESEncrypt(

input => '原始資料'

,key => '加密金鑰');



參數

input: 長度要是 8 的倍數,若不足 8 的倍數,則用空白補足.

key: 長度最少要 8 碼以上; 不同的 Key,加密結果將會不同.

傳回值型態: raw



傳回值型態若要 varchar2, 則再用 utl_raw.cast_to_varchar2 轉換成字串.

其中, input、key、傳回值均為 raw 的 16 進位字串型態,

所以, input、key 字串可利用 utl_raw.cast_to_raw 來轉換為 16 進位資料.



4. DES 解密


DBMS_OBFUSCATION_TOOLKIT.DESDecrypt(

input => '已加密資料'

, key => '解密金鑰');



參數

input: 用 DesEncrypt 加密的資料.

key: 長度最少要 8 碼以上; 不同的 Key,解密結果將會不同.

傳回值型態: raw



明:

傳回值型態若要 varchar2, 則再用 utl_raw.cast_to_varchar2 轉換成字串.

其中, input、key、傳回值均為 raw 的 16 進位字串型態,

所以, input、key 字串可利用 utl_raw.cast_to_raw 來轉換為 16 進位資料.



5. 加密範例


select

dbms_obfuscation_toolkit.DESEncrypt(

input => utl_raw.cast_to_raw(RPAD( 'test123',8, ' ' ))

,key => utl_raw.cast_to_raw('abcdefgh'))

from dual;



執行結果




input原始資料 = 'test123'

加密key = 'abcdefgh'必需與解密key相同

input長度要是 8 的倍數,所以使用RPAD於右方補空白

input 與key以utl_raw.cast_to_raw 轉換成16 進位資料



6. 解密範例



select trim(utl_i18n.raw_to_char(dbms_obfuscation_toolkit.DESDecrypt(

input => 'CB8D9CDF5B111C42'

, key => utl_raw.cast_to_raw('abcdefgh')

))) from dual;



執行結果




input加密後資料 = ' CB8D9CDF5B111C42

解密密key = abcdefgh'必需與加密key相同

解密後資料為16 進位資料,以utl_i18n.raw_to_char轉回可識別文字

因原始資料有補空白,最後以trim將多餘空白移除



7. 參考來源


http://tomkuo139.blogspot.tw/2016/06/oracle-database-des.html

湯菀鈺