当前位置: 首页 > article >正文

oracle 9i 使用dbms_obfuscation_toolkit加密解密

加密(encrypt)解密(decrypt)采用 Oracle DBMS_OBFUSCATION_TOOLKIT package.

利用这个包,我们可以对数据进行DES,Triple DES或者MD5加密.

DESGETKEY   --产生密钥,用于DES算法
   DES3GETKEY  -- 产生密钥,用于Triple DES算法
   DESENCRYPT  -- DES算法加密数据
   DESDECRYPT  -- DES算法解密数据
   DES3ENCRYPT -- Triple DES算法加密数据
   DES3DECRYPT -- DES算法解密数据
   MD5         -- MD5算法加密数据

使用DES算法和Triple DES算法的特征之一. 是输入长度必须是8的倍数,而输出也是8的倍数,所以我们的字段长度也是8的倍数.如果输入不是8的倍数,会报错.

The key specified is too short for the algorithm. DES requires a key of at least 8 bytes. Triple DES requires a key of least 16 bytes in two-key mode and 24 bytes in three-key mode.

也可以使用DESGETKEY获取Key

PROCEDURE DESGETKEY
参数名称                       类型                    输入/输出默认值?
------------------------------ ----------------------- ------ --------
 SEED                           RAW                     IN
 KEY                            RAW                     OUT

create or replace package PG_ENCRYPT_DECRYPT is
  function getkey return varchar2;
  function encrypt(p_in varchar2) return varchar2;
  function decrypt(p_in varchar2) return varchar2;
end;

create or replace package body PG_ENCRYPT_DECRYPT is
  function getkey return varchar2 is
    v_type varchar2(1) := '';
    v_rtn  varchar2(40);
    v_key  varchar2(20) := 'AAAA1234';
  begin
    if (v_type = '1') then
      select to_char(sysdate, 'yyyy') into v_key from dual;
    elsif (v_type = '2') then
      select to_char(sysdate, 'yyyyQ') into v_key from dual;
    elsif (v_type = '3') then
      select to_char(sysdate, 'yyyymm') into v_key from dual;
    elsif (v_type = '4') then
      select to_char(sysdate, 'yyyyWW') into v_key from dual;
    elsif (v_type = '5') then
      select to_char(sysdate, 'yyyymmdd') into v_key from dual;
    end if;
    for i in 1 .. length(v_key) loop
      v_rtn := v_rtn || to_char(ascii(substr(v_key, i, 1)));
    end loop;
    return v_rtn;
  end;
  /* Creating function DECRYPT*/
  function encrypt(p_in varchar2) return varchar2 is
    v_in  varchar2(320);
    v_out varchar2(1000);
  begin
    v_in  := rpad(p_in, (trunc(length(p_in) / 8) + 1) * 16, chr(0));
    v_out := UTL_RAW.CAST_TO_RAW(dbms_obfuscation_toolkit.desencrypt(input_string => v_in,
                                                                     key_string   => getkey()));
    return v_out;
  end;
  /*Creating function ENCRYPT*/
  function decrypt(p_in varchar2) return varchar2 is
    v_out varchar2(1000);
  begin
    dbms_obfuscation_toolkit.DESDECRYPT(input_string     => UTL_RAW.CAST_TO_varchar2(p_in),
                                        key_string       => getkey(),
                                        decrypted_string => v_out);
    v_out := rtrim(v_out, chr(0));
    return v_out;
  end;

end;


http://www.kler.cn/a/385058.html

相关文章:

  • 如何创建备份设备以简化 SQL Server 备份过程?
  • Windows系统使用OpenSSL生成自签名证书
  • 一种高度集成的数字化管理平台:城市管理综合执法系统(源码)
  • vue:Transition
  • 网络编程——TCP通信练习
  • 初识Mysql数据库
  • 蓝桥杯-Python组(py的哈希表)
  • LangChain Ollama实战文献检索助手(二)少样本提示FewShotPromptTemplate示例选择器
  • Android 手机设备的OEM-unlock解锁 和 adb push文件
  • java的threadlocal为何内存泄漏
  • 【Pytorch】model.eval()与model.train()
  • 微分段如何防止勒索软件攻击
  • 连接kafka消息队列报org.apache.kafka.clients.NetworkClient异常
  • 数据库管理-第258期 23ai:Oracle Data Redaction(20241104)
  • Android Kotlin Flow 冷流 热流
  • C++中,如何找到一个vector中最大的元素
  • 【HarmonyOS】键盘遮挡输入框UI布局处理
  • Flux comfyui 部署笔记,整合包下载
  • MySQL常用的关键字(详细)
  • MATLAB 在数组的元素后面使用百分号 `%` 添加注释时会将其误认为是行分隔符,导致数组维度不一致
  • LangChain实战分享
  • 【Linux】进程信号全攻略(二)
  • 什么是 AWS PrivateLink
  • 深入理解Python设计模式:工厂模式实践与应用
  • SpringCloud Sentinel 服务治理详解
  • 群控系统服务端开发模式-应用开发-系统配置开发