DECRYPT
接口/方法功能
- 解密RAW类型数据,可以返回RAW类型数据或VARCHAR类型数据。
- 解密BLOB类型数据,可以返回BLOB类型数据或CLOB类型数据。
解密RAW类型数据
接口/方法声明
sql
-- 解密结果为VARCHAR类型
FUNCTION Decrypt(
src IN RAW,
typ IN INTEGER,
key IN VARCHAR,
iv IN VARCHAR DEFAULT NULL
) RETURN VARCHAR;
-- 解密结果为RAW类型
FUNCTION Decrypt(
src IN RAW,
typ IN INTEGER,
key IN RAW,
iv IN RAW DEFAULT NULL
) RETURN RAW;
参数说明
参数名称 | 参数类型 | 参数解释 | 默认值 |
---|---|---|---|
src | RAW/VARCHAR | 待解密的数据 | 无 |
typ | INTEGER | 加密类型/套件,由块加密算法、模式、填充方式组成 | 无 |
key | RAW/VARCHAR | 用于加密解密的密钥 | 无 |
iv | RAW/VARCHAR | 初始化向量 | 无 |
操作示例
sql
DECLARE
typ INTEGER := DBMS_CRYPTO.ENCRYPT_AES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
key VARCHAR := '这是key';
src_bin RAW;
msg VARCHAR;
src VARCHAR := 'abcdefghijklmnopqrstuvwxyz';
enc_bin RAW;
c VARCHAR;
BEGIN
enc_bin := DBMS_CRYPTO.ENCRYPT(src,typ,key);
msg := DBMS_CRYPTO.DECRYPT(enc_bin,typ,key);
SEND_MSG(msg);
END;
/
解密BLOB类型数据
接口/方法声明
sql
-- 解密结果为BLOB类型
PROCEDURE Decrypt(
dst IN OUT BLOB,
src IN BLOB,
typ IN INTEGER,
key IN RAW,
iv IN RAW DEFAULT NULL
);
-- 解密结果为CLOB类型
PROCEDURE Decrypt(
dst IN OUT CLOB,
src IN BLOB,
typ IN INTEGER,
key IN RAW,
iv IN RAW DEFAULT NULL
);
参数说明
参数名称 | 参数类型 | 参数解释 | 默认值 |
---|---|---|---|
dst | BLOB/CLOB | 保存解密结果的容器,预先声明的LOB | 无 |
src | RAW/VARCHAR | 待解密的数据 | 无 |
typ | INTEGER | 加密类型/套件,由块加密算法、模式、填充方式组成 | 无 |
key | RAW | 用于加密解密的密钥 | 无 |
iv | RAW | 初始化向量 | 无 |
操作示例
sql
-- 假设存在表t1(a INT, b BLOB)
-- 存有一行数据(1, <BLOB>)
-- 对该BLOB执行加密与解密
CREATE TABLE t1(a INT, b BLOB);
INSERT INTO t1 (a, b) VALUES(1, ?); <# /home/test/test.txt;
DECLARE
typ INTEGER := DBMS_CRYPTO.ENCRYPT_AES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
enc_dst BLOB = UTL_RAW.CAST_TO_RAW('1');
dec_dst BLOB = UTL_RAW.CAST_TO_RAW('1');
src BLOB = UTL_RAW.CAST_TO_RAW('1');
key VARCHAR = 'mykeymykeymykeym';
iv VARCHAR = 'abcdef0123456789';
BEGIN
SELECT b INTO src FROM t1 WHERE a = 1; --将表中BLOB数据加载至src中
DBMS_CRYPTO.ENCRYPT(enc_dst,src,typ,key,iv);
SEND_MSG(RAWTOHEX(enc_dst));
DBMS_CRYPTO.ENCRYPT(dec_dst,enc_dst,typ,key,iv);
SEND_MSG(RAWTOHEX(dec_dst));
END;
/