DBMS_CRYPTO

DBMS_CRYPTO 包提供的函数和存储过程允许用户对RAW、BLOB以及CLOB数据进行加密或解密。您可以使用 DBMS_CRYPTO 函数来产生强加密型随机值。

DBMS_CRYPTO子程序总览

子程序

说明

ENCRYPT Function

支持AES(AES、AES128、AES192、AES256)DES和3DES加密,填充方式支持none和pkcs,加密模式支持cbc和ecb。

ENCRYPT Procedures

支持AES(AES、AES128、AES192、AES256)DES和3DES加密,填充方式支持none和pkcs,加密模式支持cbc和ecb。

DECRYPT Function

支持对上述加密的结果进行解密。

DECRYPT Procedures

支持对上述加密的结果进行解密。

HASH Function

支持对raw blob clob类型的md4 md5 sha1 sha256 sha384 sha512消息摘要函数。

MAC Function

支持对raw blob clob类型的md5 sha1 sha256 sha384 sha512消息认证算法。

RANDOMBYTES Function

生成长度0~1024的随机bytes串。

ENCRYPT Function

该函数使用用户指定的加密算法将RAW类型的输入加密为RAW类型数据。

语法

DBMS_CRYPTO.ENCRYPT(
   src IN RAW,
   typ IN PLS_INTEGER,
   key IN RAW,
   iv  IN RAW          DEFAULT NULL)
 RETURN RAW;

参数说明

参数

说明

src

待加密的RAW类型数据。

typ

用于指定流或块加密类型以及修饰符。

key

用于指定加密密钥。

iv

用于指定初始化向量。默认值为NULL。

示例

该示例展示了如何将RAW类型的数据通过指定的加密算法进行加密。

DECLARE
    enc_typ integer;
    enc_res raw;
BEGIN
    enc_typ := dbms_crypto.ENCRYPT_DES + dbms_crypto.CHAIN_CBC + dbms_crypto.PAD_PKCS5;
    enc_res := dbms_crypto.encrypt(utl_raw.cast_to_raw('1234567890!@#$%^&*qwertyuiop'), enc_typ, utl_raw.cast_to_raw('314639'), NULL);
    dbms_output.put_line(enc_res);
END;
-- output --
-- \x12dcbddc1c6f743401e8c383855e9a06dc8dde2b997a07067afd386754f3a84d

ENCRYPT Procedure

该存储过程使用用户指定的加密算法将BLOB或CLOB类型的数据进行加密。

语法

DBMS_CRYPTO.ENCRYPT(
 dst IN OUT BLOB,
 src IN BLOB,
 typ IN PLS_INTEGER,
 key IN RAW,
 iv IN RAW DEFAULT NULL);

DBMS_CRYPTO.ENCRYPT(
 dst IN OUT BLOB,
 src IN CLOB,
 typ IN PLS_INTEGER,
 key IN RAW,
 iv IN RAW DEFAULT NULL);

参数说明

参数

说明

dst

指定的BLOB或CLOB类型的输出数据。dst的原始值会被覆盖。

src

待加密的BLOB或CLOB类型数据。

typ

用于指定流或块加密类型以及修饰符。

key

用于指定加密密钥。

iv

用于指定初始化向量。默认值为NULL。

示例

该示例展示了如何将BLOB或CLOB类型的数据通过用户指定的加密算法进行加密。

DECLARE
    enc_typ integer;
    enc_res raw;
BEGIN
    enc_typ := dbms_crypto.DES_CBC_PKCS5;

    -- procedure with blob
    dbms_crypto.encrypt(enc_res, utl_raw.cast_to_raw('1234567890!@#$%^&*qwertyuiop'), enc_typ, utl_raw.cast_to_raw('314639'), NULL);
    dbms_output.put_line(enc_res);
    -- procedure with clob
    dbms_crypto.encrypt(enc_res, '1234567890!@#$%^&*qwertyuiop'::clob, enc_typ, utl_raw.cast_to_raw('314639'), NULL);
    dbms_output.put_line(enc_res);
END;
-- output
-- \x12dcbddc1c6f743401e8c383855e9a06dc8dde2b997a07067afd386754f3a84d
-- \x12dcbddc1c6f743401e8c383855e9a06dc8dde2b997a07067afd386754f3a84d

DECRYPT Function

该函数使用用户指定的加密算法对RAW类型的加密数据进行解密。

语法

DBMS_CRYPTO.DECRYPT(
   src IN RAW,
   typ IN PLS_INTEGER,
   key IN RAW,
   iv  IN RAW DEFAULT NULL)
 RETURN RAW;

参数说明

参数

说明

src

待解密的RAW类型数据。

typ

用于指定流或块加密类型以及修饰符。

key

用于指定加密密钥。

iv

用于指定初始化向量。默认值为NULL。

示例

该示例展示了如何将RAW类型的加密数据通过指定的加密算法进行解密。

DECLARE
    enc_typ integer;
    dec_res raw;
BEGIN
    enc_typ := dbms_crypto.DES_CBC_PKCS5;
    dec_res := dbms_crypto.decrypt(dbms_crypto.encrypt(utl_raw.cast_to_raw('1234567890!@#$%^&*qwertyuiop'), enc_typ, utl_raw.cast_to_raw('314639'), NULL), enc_typ, utl_raw.cast_to_raw('314639'), NULL);
    dbms_output.put_line(dec_res);
END;
-- output 
-- \x3132333435363738393021402324255e262a71776572747975696f70

DECRYPT Procedures

该存储过程使用用户指定的加密算法对BLOB或CLOB类型的加密数据进行解密。

语法

DBMS_CRYPTO.DECRYPT(
   dst IN OUT        BLOB,
   src IN            BLOB,
   typ IN            PLS_INTEGER,
   key IN            RAW,
   iv  IN            RAW          DEFAULT NULL);

DBMS_CRYPT.DECRYPT(
   dst IN OUT        CLOB,
   src IN            BLOB,
   typ IN            PLS_INTEGER,
   key IN            RAW,
   iv  IN            RAW          DEFAULT NULL);

参数说明

参数

说明

dst

指定的BLOB或CLOB类型的输出数据。dst的原始值会被覆盖。

src

待解密的BLOB或CLOB类型数据。

typ

用于指定流或块加密类型以及修饰符。

key

用于指定加密密钥。

iv

用于指定初始化向量。默认值为NULL。

示例

该示例展示了如何将BLOB或CLOB类型的数据通过用户指定的加密算法进行解密。

DECLARE
    enc_typ integer;
    enc_res raw;
    dec_res raw;
BEGIN
    enc_typ := dbms_crypto.DES_CBC_PKCS5;

    -- procedure with blob
    dbms_crypto.encrypt(enc_res, utl_raw.cast_to_raw('1234567890!@#$%^&*qwertyuiop'), enc_typ, utl_raw.cast_to_raw('314639'), NULL);
    dbms_crypto.decrypt(dec_res, enc_res, enc_typ, utl_raw.cast_to_raw('314639'), NULL);
    dbms_output.put_line(dec_res);

    -- procedure with clob
    dbms_crypto.encrypt(enc_res, '1234567890!@#$%^&*qwertyuiop'::clob, enc_typ, utl_raw.cast_to_raw('314639'), NULL);
    dbms_crypto.decrypt(dec_res, enc_res::clob, enc_typ, utl_raw.cast_to_raw('314639'), NULL);
    dbms_output.put_line(dec_res);
END;
-- output
-- \x3132333435363738393021402324255e262a71776572747975696f70
-- \x3132333435363738393021402324255e262a71776572747975696f70

HASH Function

该函数计算RAW类型输入数据的HASH值。

语法

DBMS_CRYPTO.Hash (
   src IN RAW,
   typ IN PLS_INTEGER)
 RETURN RAW;

DBMS_CRYPTO.Hash (
   src IN CLOB,
   typ IN PLS_INTEGER)
 RETURN RAW;

参数说明

参数

说明

src

待进行HASH值计算的输入数据。

typ

用于指定使用的HASH算法。

示例

该示例展示了如何计算一个RAW类型数据的HASH值。

DECLARE
    hash_res raw;
BEGIN
    hash_res := dbms_crypto.hash(utl_raw.cast_to_raw('1234567890!@#$%^&*qwertyuiop'), dbms_crypto.HASH_SH256);
    dbms_output.put_line(hash_res);
END;
-- output
-- \x17220452ab8b4134747fbb5ca594106fa06cef7e0571a88ca31e19447d42c894

MAC Functions

该函数计算RAW类型输入数据的MAC值。

语法

DBMS_CRYPTO.MAC (
   src IN RAW,
   typ IN PLS_INTEGER,
   key IN RAW)
 RETURN RAW;

DBMS_CRYPTO.MAC (
   src IN CLOB,
   typ IN PLS_INTEGER
   key IN RAW)
 RETURN RAW;

参数说明

参数

说明

src

待进行MAC值计算的输入数据。

typ

用于指定使用的MAC算法。

key

用于指定MAC算法使用的密钥。

示例

该示例展示了如何计算一个RAW类型数据的MAC值。

DECLARE
    mac_res raw;
BEGIN
    mac_res := dbms_crypto.mac(utl_raw.cast_to_raw('1234567890!@#$%^&*qwertyuiop'), dbms_crypto.HMAC_MD5, utl_raw.cast_to_raw('314639'));
    dbms_output.put_line(mac_res);
END;
-- output
-- \xad8641796c66172f187357ca12ceb211

RANDOMBYTES Function

该函数返回指定长度的RAW类型随机值。

语法

DBMS_CRYPTO.RANDOMBYTES (
   number_bytes IN INTEGER)
 RETURN RAW;

参数说明

参数

说明

number_bytes

指定要返回的随机字节的数量。

示例

该示例展示了如何返回指定字节数的随机值

select dbms_crypto.randombytes(16);
            randombytes             
------------------------------------
 \x560d5037ee298b187a421df030f5ee35
(1 row)