dbms_obfuscation_toolkit简介
dbms_obfuscation_toolkit主要有一下几个存储过程:-
DESGETKEY — 产生密钥,用于DES算法
DES3GETKEY – 产生密钥,用于Triple DES算法
DESENCRYPT – 用DES算法加密数据
DESDECRYPT – 用DES算法解密数据
DES3ENCRYPT — 用Triple DES算法加密数据
DES3DECRYPT — 用DES算法解密数据
MD5 — 用MD5算法加密数据
心得:加密与解密时密钥与明文(密文)的长度都要是8的倍数。
create or replace package PG_ENCRYPT_DECRYPT is
iKey varchar2(8) := 'oracle9i';
function GEN_RAW_KEY(iKey in varchar2) return raw;
function DECRYPT_3KEY_MODE(iValue in raw, iMode in pls_integer)
return varchar2;
function ENCRYPT_3KEY_MODE(iValue in varchar2, iMode in pls_integer)
return raw;
FUNCTION ENCRYPT(iValue in varchar2) return raw;
FUNCTION DECRYPT(iValue in raw) return varchar2;
FUNCTION MD5(passwd IN VARCHAR2) RETURN VARCHAR2;
end;
create or replace package body PG_ENCRYPT_DECRYPT is
function GEN_RAW_KEY(iKey in varchar2) return raw as
rawkey raw(240) := '';
begin
for i in 1 .. length(iKey) loop
rawkey := rawkey || hextoraw(to_char(ascii(substr(iKey, i, 1))));
end loop;
return rawkey;
end;
/*
Creating function DECRYPT_3KEY_MODE
*/
FUNCTION DECRYPT_3KEY_MODE(iValue in raw, iMode in pls_integer)
return varchar2 as
vDecrypted varchar2(4000);
rawkey raw(240) := '';
begin
rawkey := GEN_RAW_KEY(iKey);
-- decrypt input string
vDecrypted := dbms_obfuscation_toolkit.des3decrypt(UTL_RAW.CAST_TO_VARCHAR2(iValue),
key_string => rawkey,
which => iMode);
return vDecrypted;
end;
/*
Creating function ENCRYPT_3KEY_MODE
*/
FUNCTION ENCRYPT_3KEY_MODE(iValue in varchar2, iMode in pls_integer)
return raw as
vEncrypted varchar2(4000);
vEncryptedRaw Raw(2048);
rawkey raw(240) := '';
begin
rawkey := GEN_RAW_KEY(iKey);
-- encrypt input string
vEncrypted := dbms_obfuscation_toolkit.des3encrypt(iValue,
key_string => rawkey,
which => iMode);
-- convert to raw as out
vEncryptedRaw := UTL_RAW.CAST_TO_RAW(vEncrypted);
return vEncryptedRaw;
end;
FUNCTION ENCRYPT(iValue in varchar2) return raw as
vEncrypted varchar2(4000);
vEncryptedRaw Raw(2048);
rawkey raw(240) := '';
rawkey1 raw(240) := '';
begin
rawkey := GEN_RAW_KEY(iKey);
rawkey1 := GEN_RAW_KEY(iValue);
-- encrypt input string
dbms_obfuscation_toolkit.DESEncrypt(input => rawkey1,
key => rawkey,
encrypted_data => vEncryptedRaw);
-- convert to raw as out
return vEncryptedRaw;
end;
FUNCTION DECRYPT(iValue in raw) return varchar2 as
vEncrypted varchar2(4000);
vEncryptedRaw Raw(2048);
rawkey raw(240) := '';
rawkey1 raw(240) := '';
begin
rawkey := GEN_RAW_KEY(iKey);
-- encrypt input string
dbms_obfuscation_toolkit.DESDecrypt(input => iValue,key => rawkey,decrypted_data => vEncryptedRaw);
-- convert to raw as out
return vEncryptedRaw;
end;
FUNCTION MD5(passwd IN VARCHAR2) RETURN VARCHAR2 IS
retval varchar2(32);
BEGIN
retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd));
RETURN retval;
END;
end;