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

无需DBMS_CRYPTO包的Oracle列数据加解密方法咨询

在Oracle中无需DBMS_CRYPTO的列数据加解密方案
  • 基于UTL_ENCODE和UTL_RAW的简单可逆加密
    Oracle没有直接替代DBMS_CRYPTO的内置可逆加解密函数,但可以通过UTL_ENCODE和UTL_RAW组合实现基础的可逆加密(比如异或+Base64编码),无需特殊权限,示例如下:

    加密自定义函数:

    CREATE OR REPLACE FUNCTION simple_encrypt(p_data IN VARCHAR2, p_key IN VARCHAR2) RETURN VARCHAR2 IS
        v_raw_data RAW(2000);
        v_raw_key RAW(2000);
        v_encrypted_raw RAW(2000);
    BEGIN
        v_raw_data := UTL_RAW.CAST_TO_RAW(p_data);
        v_raw_key := UTL_RAW.CAST_TO_RAW(p_key);
        -- 重复密钥匹配数据长度后异或加密
        v_encrypted_raw := UTL_RAW.XOR(
            v_raw_data,
            UTL_RAW.SUBSTR(UTL_RAW.REPEAT(v_raw_key, CEIL(UTL_RAW.LENGTH(v_raw_data)/UTL_RAW.LENGTH(v_raw_key))), 1, UTL_RAW.LENGTH(v_raw_data))
        );
        -- Base64编码便于存储
        RETURN UTL_ENCODE.BASE64_ENCODE(v_encrypted_raw);
    END;
    /
    

    解密自定义函数:

    CREATE OR REPLACE FUNCTION simple_decrypt(p_encrypted IN VARCHAR2, p_key IN VARCHAR2) RETURN VARCHAR2 IS
        v_encrypted_raw RAW(2000);
        v_raw_key RAW(2000);
        v_decrypted_raw RAW(2000);
    BEGIN
        v_encrypted_raw := UTL_ENCODE.BASE64_DECODE(p_encrypted);
        v_raw_key := UTL_RAW.CAST_TO_RAW(p_key);
        -- 异或解密还原数据
        v_decrypted_raw := UTL_RAW.XOR(
            v_encrypted_raw,
            UTL_RAW.SUBSTR(UTL_RAW.REPEAT(v_raw_key, CEIL(UTL_RAW.LENGTH(v_encrypted_raw)/UTL_RAW.LENGTH(v_raw_key))), 1, UTL_RAW.LENGTH(v_encrypted_raw))
        );
        RETURN UTL_RAW.CAST_TO_VARCHAR2(v_decrypted_raw);
    END;
    /
    

    注意:该方案加密强度较低,仅适用于非敏感数据的简单保护,不适合高安全要求场景。

  • 哈希函数的局限性
    你使用的standard_hash(col,'MD5')属于单向哈希算法,本身不可逆,仅用于数据校验或密码存储(需加盐),无法满足解密需求,因此不适用你的场景。

  • SQL Server函数的兼容性问题
    SQL Server的ENCRYPTBY*和DECRYPTBY*系列函数是其专属内置函数,Oracle无对应替代,无法跨数据库使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:15:01