Oracle MD5、3des实例

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值