OracleDatabaseDES加密與解密
主題: |
OracleDatabaseDES加密與解密 |
文章簡介: |
Oracle的dbms_obfuscation_toolkit的DES加密和解密 |
作者: |
湯菀鈺 |
版本/產出日期: |
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
