You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用dbms_crypto替代Oracle 21c移除的dbms_obfuscation_toolkit函数

Oracle DBMS_OBFUSCATION_TOOLKIT 废弃函数替代方案

Oracle 21c已正式移除DBMS_OBFUSCATION_TOOLKIT,以下是两个废弃函数的直接替代方案:

1. DBMS_OBFUSCATION_TOOLKIT.DESEncrypt 的替代

使用DBMS_CRYPTO.ENCRYPT函数,示例代码如下:

DECLARE
  v_plaintext  VARCHAR2(100) := '需要加密的文本';
  v_key        RAW(16) := UTL_RAW.CAST_TO_RAW('12345678'); -- DES密钥长度固定为8字节
  v_encrypted  RAW(2000);
BEGIN
  v_encrypted := DBMS_CRYPTO.ENCRYPT(
    src => UTL_RAW.CAST_TO_RAW(v_plaintext),
    typ => DBMS_CRYPTO.DES_CBC_PKCS5, -- 匹配原函数默认的CBC模式与PKCS5填充
    key => v_key,
    iv  => UTL_RAW.CAST_TO_RAW('00000000') -- CBC模式需初始化向量,原函数未指定时可使用全0向量
  );
  DBMS_OUTPUT.PUT_LINE('加密结果: ' || v_encrypted);
END;
/

原DESEncrypt默认采用CBC模式与PKCS5填充逻辑,替代时需指定对应算法类型DBMS_CRYPTO.DES_CBC_PKCS5,同时必须提供符合DES标准的8字节密钥。

2. DBMS_OBFUSCATION_TOOLKIT.DESDecrypt 的替代

使用DBMS_CRYPTO.DECRYPT函数,示例代码如下:

DECLARE
  v_encrypted  RAW(2000) := '加密后的RAW值';
  v_key        RAW(16) := UTL_RAW.CAST_TO_RAW('12345678');
  v_plaintext  VARCHAR2(100);
BEGIN
  v_plaintext := UTL_RAW.CAST_TO_VARCHAR2(
    DBMS_CRYPTO.DECRYPT(
      src => v_encrypted,
      typ => DBMS_CRYPTO.DES_CBC_PKCS5,
      key => v_key,
      iv  => UTL_RAW.CAST_TO_RAW('00000000') -- 需与加密时使用的初始化向量完全一致
    )
  );
  DBMS_OUTPUT.PUT_LINE('解密结果: ' || v_plaintext);
END;
/

解密时必须使用与加密环节完全相同的密钥、初始化向量和算法类型,才能正确还原明文内容。

内容的提问来源于stack exchange,提问作者doberkofler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:09:35