oracle 使用 base64 des 加密解密


平時使用到的base 、des 加密方法

 對於des 加解密 的秘鑰 長度為8位,當輸入的秘鑰位數大於8位自動截取。

包頭

create or replace package pkg_compare is
  function f_en_base64(pi_str varchar2) return varchar2;
  function f_de_base64(pi_str varchar2) return varchar2;
  procedure p_decrypt_des
  (
    pi_str    varchar2
   ,pi_key    varchar2
   ,po_encode out varchar2
  );
  procedure p_encrypt_des
  (
    pi_str    varchar2
   ,pi_key    varchar2
   ,po_encode out varchar2
  );

end;

包體:

create or replace package body pkg_compare is
  /*base64 加密函數 輸入需要加密的字符串,返回加密后的字符串。*/
  function f_en_base64(pi_str varchar2) return varchar2 is
    out_base64 varchar2(4000);
  begin
    --調用系統base64轉換函數
    select utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw(pi_str)))
      into out_base64
      from dual;
    return out_base64;
  end;

  /*base64 解密函數 輸入需要解密密的字符串,返回解密密后的字符串。*/
  function f_de_base64(pi_str varchar2) return varchar2 is
    out_base64 varchar2(4000);
  begin
    --調用系統base64轉換函數
    select utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw(pi_str)))
      into out_base64
      from dual;
    return out_base64;
  end;

  /*解 des 存儲過程*/
  procedure p_decrypt_des
  (
    pi_str    varchar2
   ,pi_key    varchar2
   ,po_encode out varchar2
  ) is
    nv_str varchar2(4000);
 
  begin
   
    --調用des 解密系統函數
    dbms_obfuscation_toolkit.desdecrypt(input_string     => utl_raw.cast_to_varchar2(pi_str)
                                       ,key_string       => pi_key
                                       ,decrypted_string => nv_str);
    po_encode := rtrim(nv_str, chr(0));
 
  end;
  /*des 加密*/
  procedure p_encrypt_des
  (
    pi_str    varchar2
   ,pi_key    varchar2
   ,po_encode out varchar2
  ) is
    nv_str        varchar2(4000);
    raw_input     raw(128);
    key_input     raw(128);
    decrypted_raw raw(2048);
  begin
    nv_str    := rpad(pi_str, (trunc(length(pi_str) / 8) + 1) * 8, chr(0));
    raw_input := utl_raw.cast_to_raw(nv_str);
    key_input := utl_raw.cast_to_raw(pi_key);
    dbms_obfuscation_toolkit.desencrypt(input          => raw_input
                                       ,key            => key_input
                                       ,encrypted_data => decrypted_raw);
    po_encode := rawtohex(decrypted_raw);
    return;
  end;
end;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM