系统包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_text | RAW/VARCHAR | 要解密的资源 |
typ | INTEGER | 解密类型/套件,由块解密算法、模式、填充方式组成 |
v_text | RAW/VARCHAR | 用于解密的密码 |
v_dec | VARCHAR | 解密后返回明文 |