Skip to content

系统包DBMS_CRYPTO解密

对于表中新增数据解密,首先基于原系统包中包体定义创建自定义解密函数,对密文转换的十六进制数字进行解密,加解密套件必须一致,否则无法解密。

示例

sql
--利用内置加密系统包创建自定义解密函数:
SQL> CREATE OR REPLACE FUNCTION decrypt_aes(p_text VARCHAR,v_text VARCHAR) RETURN VARCHAR IS
    typ INTEGER := DBMS_CRYPTO.ENCRYPT_AES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
    v_dec VARCHAR;
    BEGIN
    v_dec:=DBMS_CRYPTO.DECRYPT(p_text,typ,v_text);
    RETURN v_dec;
    END;

--示例:
SQL> SELECT decrypt_aes('B87F341CD02BD2E4460B61E36F0FB4CF','123456') FROM DUAL;

EXPR1 |
------------------------------------------------------------------------------
加密内容|

SQL> SELECT id,name,decrypt_aes(phonenumber,'123456') FROM test_encrypt WHERE id=3;

ID | NAME | EXPR1 |
------------------------------------------------------------------------------
3 | 张三| 18123456789|

--用错误的解密密码进行解密

SQL> SELECT decrypt_aes('B87F341CD02BD2E4460B61E36F0FB4CF','12345') FROM DUAL;

EXPR1 |
------------------------------------------------------------------------------
|����"��J|

上述示例,创建解密函数后,将章节 系统包DBMS_CRYPTO加密 的示例1中密文“B87F341CD02BD2E4460B61E36F0FB4CF”解密为“加密内容”;将表“TEST_ENCRYPT”插入“张三”的“PHONENUMBER”进行解密,以明文方式进行返回。

参数解释

参数名称参数类型参数解释
p_textRAW/VARCHAR要解密的资源
typINTEGER解密类型/套件,由块解密算法、模式、填充方式组成
v_textRAW/VARCHAR用于解密的密码
v_decVARCHAR解密后返回明文