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)