Skip to content

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;

参数说明

参数名称参数类型参数解释默认值
srcRAW/VARCHAR待解密的数据
typINTEGER加密类型/套件,由块加密算法、模式、填充方式组成
keyRAW/VARCHAR用于加密解密的密钥
ivRAW/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
);

参数说明

参数名称参数类型参数解释默认值
dstBLOB/CLOB保存解密结果的容器,预先声明的LOB
srcRAW/VARCHAR待解密的数据
typINTEGER加密类型/套件,由块加密算法、模式、填充方式组成
keyRAW用于加密解密的密钥
ivRAW初始化向量

操作示例

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;
/