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 進位資料.
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 進位資料.
範例
declare v_data varchar2(100) := 'TOMKUO '; -- 資料為 8 的倍數, 不足用空白補足 v_key varchar2(100) := 'abcdefgh'; -- 資料最好要 8 個以上 v_encrypt varchar2(250); v_decrypt varchar2(250); begin -- 加密 v_encrypt := dbms_obfuscation_toolkit.DESEncrypt( input => utl_raw.cast_to_raw(v_data) -- 需轉換成 16 進位 , key => utl_raw.cast_to_raw(v_key) -- 需轉換成 16 進位 ); dbms_output.put_line( v_data || ' 用 Key: ' || v_key || ' 加密, 結果 : ' || v_encrypt ); -- 用相同 Key 解密 v_decrypt := dbms_obfuscation_toolkit.DESDecrypt( input => v_encrypt , key => utl_raw.cast_to_raw(v_key) ); dbms_output.put_line( v_encrypt || ' 用 Key: ' || v_key || ' 解密, 結果 : ' || utl_raw.cast_to_varchar2(v_decrypt) ); -- 用不同 Key 解密 v_decrypt := dbms_obfuscation_toolkit.DESDecrypt( input => v_encrypt , key => utl_raw.cast_to_raw('12345678') ); dbms_output.put_line( v_encrypt || ' 用 Key: ' || '12345678' || ' 解密, 結果 : ' || utl_raw.cast_to_varchar2(v_decrypt) ); end; /* 輸出結果 : TOMKUO 用 Key: abcdefgh 加密, 結果 : 4227EC5A884A5AD3 4227EC5A884A5AD3 用 Key: abcdefgh 解密, 結果 : TOMKUO 4227EC5A884A5AD3 用 Key: 12345678 解密, 結果 : .�t�M */