Oracle 字符串加密方法


测试环境:Oracle 10g

1、方法一 MD5加密

  1. create or replace function fn_md5(input_string VARCHAR2) return varchar2   
  2. IS  
  3. raw_input RAW(128) := UTL_RAW.CAST_TO_RAW(input_string);   
  4. decrypted_raw RAW(2048);   
  5. error_in_input_buffer_length EXCEPTION;   
  6. BEGIN  
  7. sys.dbms_obfuscation_toolkit.MD5(input => raw_input,checksum => decrypted_raw);   
  8. return rawtohex(decrypted_raw);   
  9. END;  

2、方法二 3des算法

  1. create or replace package PG_ENCRYPT_DECRYPT   
  2. is  
  3. iKey varchar2(8):='Oracle9i';   
  4. function GEN_RAW_KEY ( iKey in varchar2) return raw;   
  5. function DECRYPT_3KEY_MODE(iValue in raw,iMode in pls_integer)return varchar2;   
  6. function ENCRYPT_3KEY_MODE(iValue in varchar2,iMode in pls_integer)return raw;   
  7. function FormatStr(iValue in varchar2)return varchar2;   
  8. function FormatStr2(iValue in varchar2)return varchar2;   
  9. end;  

 

 

  1. create or replace package body PG_ENCRYPT_DECRYPT   
  2. is  
  3. function GEN_RAW_KEY ( iKey in varchar2)   
  4. return raw   
  5. as  
  6. rawkey raw(240) := '';   
  7. begin  
  8. for i in 1..length(iKey) loop   
  9. rawkey := rawkey || hextoraw(to_char(ascii(substr(iKey, i, 1))));   
  10. end loop;   
  11. return rawkey;   
  12. end GEN_RAW_KEY;   
  13. /* Creating function DECRYPT_3KEY_MODE*/   
  14. FUNCTION DECRYPT_3KEY_MODE ( iValue in raw, iMode in pls_integer)return varchar2   
  15. as  
  16. vDecrypted varchar2(4000);   
  17. rawkey raw(240) := '';   
  18. begin  
  19. rawkey := GEN_RAW_KEY(iKey);-- decrypt input string   
  20. vDecrypted := dbms_obfuscation_toolkit.des3decrypt (UTL_RAW.CAST_TO_VARCHAR2(iValue), key_string => rawkey, which => iMode);   
  21. return FormatStr2(vDecrypted);   
  22. end DECRYPT_3KEY_MODE;   
  23. /*Creating function ENCRYPT_3KEY_MODE*/   
  24. FUNCTION ENCRYPT_3KEY_MODE ( iValue in varchar2, iMode in pls_integer)return raw   
  25. as  
  26. vEncrypted varchar2(4000);   
  27. vEncryptedRaw Raw(2048);   
  28. rawkey raw(240) := '';   
  29. begin  
  30. rawkey := GEN_RAW_KEY(iKey);-- encrypt input string   
  31. vEncrypted := dbms_obfuscation_toolkit.des3encrypt (FormatStr(iValue), key_string => rawkey, which => iMode);   
  32. -- convert to raw as out   
  33. vEncryptedRaw := UTL_RAW.CAST_TO_RAW(vEncrypted);   
  34. return vEncryptedRaw;   
  35. end ENCRYPT_3KEY_MODE;   
  36.   
  37. function FormatStr(iValue in varchar2)return varchar2   
  38. as  
  39. begin  
  40. declare  
  41. i number;   
  42. j number;   
  43. m_value varchar2(4000);   
  44. begin  
  45. m_value:=iValue;   
  46. i:=(length(m_value) mod 8);   
  47. if i<>0 then  
  48. j:=1;   
  49. for j in 1..(8-i) loop   
  50. m_value:=m_value || '#';   
  51. end loop;   
  52. end if;   
  53. return m_value;   
  54. end;   
  55. end FormatStr;   
  56.   
  57. function FormatStr2(iValue in varchar2)return varchar2   
  58. as  
  59. begin  
  60. declare  
  61. i number;   
  62. j number;   
  63. m_value varchar2(4000);   
  64. begin  
  65. m_value:=iValue;   
  66. i:=instr(iValue,'#',1,1);   
  67. if i>0 then  
  68. m_value:=substr(m_value,1,i-1);   
  69. end if;   
  70. return m_value;   
  71. end;   
  72. end FormatStr2;   
  73. end PG_ENCRYPT_DECRYPT;  

相关内容