如何用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
相关产品推荐
相关产品推荐

