Oracle 字符串加密方法
?测试环境:oracle10g
?
1、方法一 MD5加密
create or replace package body PG_ENCRYPT_DECRYPTisfunction GEN_RAW_KEY ( iKey in varchar2)return rawasrawkey raw(240) := '';beginfor i in 1..length(iKey) looprawkey := 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 varchar2asvDecrypted varchar2(4000);rawkey raw(240) := '';beginrawkey := GEN_RAW_KEY(iKey);-- decrypt input stringvDecrypted := 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 rawasvEncrypted varchar2(4000);vEncryptedRaw Raw(2048);rawkey raw(240) := '';beginrawkey := GEN_RAW_KEY(iKey);-- encrypt input stringvEncrypted := dbms_obfuscation_toolkit.des3encrypt (FormatStr(iValue), key_string => rawkey, which => iMode);-- convert to raw as outvEncryptedRaw := UTL_RAW.CAST_TO_RAW(vEncrypted);return vEncryptedRaw;end ENCRYPT_3KEY_MODE;function FormatStr(iValue in varchar2)return varchar2asbegindeclarei number;j number;m_value varchar2(4000);beginm_value:=iValue;i:=(length(m_value) mod 8);if i<>0 thenj:=1;for j in 1..(8-i) loopm_value:=m_value || '#';end loop;end if;return m_value;end;end FormatStr;function FormatStr2(iValue in varchar2)return varchar2asbegindeclarei number;j number;m_value varchar2(4000);beginm_value:=iValue;i:=instr(iValue,'#',1,1);if i>0 thenm_value:=substr(m_value,1,i-1);end if;return m_value;end;end FormatStr2;end PG_ENCRYPT_DECRYPT;
?