日期:2014-05-16 浏览次数:20562 次
?测试环境:oracle10g
?
1、方法一 MD5加密
create or replace function fn_md5(input_string VARCHAR2) return varchar2 IS raw_input RAW(128) := UTL_RAW.CAST_TO_RAW(input_string); decrypted_raw RAW(2048); error_in_input_buffer_length EXCEPTION; BEGIN sys.dbms_obfuscation_toolkit.MD5(input => raw_input,checksum => decrypted_raw); return rawtohex(decrypted_raw); END;
??
2、方法二 3des算法
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 FormatStr(iValue in varchar2)return varchar2; function FormatStr2(iValue 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 GEN_RAW_KEY; /* 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 FormatStr2(vDecrypted); end DECRYPT_3KEY_MODE; /*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 (FormatStr(iValue), key_string => rawkey, which => iMode); -- convert to raw as out vEncryptedRaw := UTL_RAW.CAST_TO_RAW(vEncrypted); return vEncryptedRaw; end ENCRYPT_3KEY_MODE; function FormatStr(iValue in varchar2)return varchar2 as begin declare i number; j number; m_value varchar2(4000); begin m_value:=iValue; i:=(length(m_value) mod 8); if i<>0 then j:=1; for j in 1..(8-i) loop m_value:=m_value || '#'; end loop; end if; return m_value; end; end FormatStr; function FormatStr2(iValue in varchar2)return varchar2 as begin declare i number; j number; m_value varchar2(4000); begin m_value:=iValue; i:=instr(iValue,'#',1,1); if i>0 then m_value:=substr(m_value,1,i-1); end if; return m_value; end; end FormatStr2; end PG_ENCRYPT_DECRYPT;
?