Skip to content

ENCRYPT

接口/方法功能

  • 加密RAW或VARCHAR类型数据,统一返回RAW类型加密数据。
  • 加密BLOB或CLOB类型数据,统一返回BLOB类型加密数据。

加密RAW或VARCHAR类型数据

接口/方法声明

sql
-- RAW类型
FUNCTION Encrypt(
    src IN RAW,
    typ IN INTEGER,
    key IN RAW,
    iv  IN RAW DEFAULT NULL
) RETURN RAW;

-- VARCHAR类型
FUNCTION Encrypt(
    src IN VARCHAR,
    typ IN INTEGER,
    key IN VARCHAR,
    iv  IN VARCHAR DEFAULT NULL
) RETURN RAW;

参数说明

参数名称参数类型参数解释默认值
srcRAW/VARCHAR待加密的数据
typINTEGER加密类型/套件,由块加密算法、模式、填充方式组成
keyRAW/VARCHAR用于加密解密的密钥
ivRAW/VARCHAR初始化向量NULL

操作示例

加密VARCHAR类型数据

sql
DECLARE
  typ INTEGER := DBMS_CRYPTO.ENCRYPT_AES + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
  src VARCHAR := 'abcdefghijklmnopqrstuvwxyz';
  enc_bin RAW;
  key VARCHAR := '这是key';
BEGIN
  enc_bin:=DBMS_CRYPTO.ENCRYPT(src,typ,key);
  SEND_MSG(enc_bin);
END;
/

加密BLOB或CLOB类型数据

接口/方法声明

sql
-- BLOB类型
PROCEDURE Encrypt(
    dst IN OUT BLOB,
    src IN BLOB,
    typ IN INTEGER,
    key IN RAW,
    iv  IN RAW DEFAULT NULL
);

-- CLOB类型
PROCEDURE Encrypt(
    dst IN OUT BLOB,
    src IN CLOB,
    typ IN INTEGER,
    key IN RAW,
    iv  IN RAW DEFAULT NULL
);

参数说明

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

操作示例

加密BLOB类型数据

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;
  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(dst,src,typ,key,iv);
  SEND_MSG(RAWTOHEX(dst));
END;
/