使用 DBMS_CRYPTO 包时,指定的加密算法需存在于数据库中;可以通过查询系统视图 V$CIPHERS 获得;
使用时,通过使用包中的常量进行指定,如 DES_ECB 算法可以指定为 DBMS_CRYPTO.ENCRYPT_DES+DBMS_CRYPTO.CHAIN_ECB+ DBMS_CRYPTO.PAD_PKCS5;DES_ECB_NOPAD 算法可以指定为 DBMS_CRYPTO.ENCRYPT_DES+DBMS_CRYPTO.CHAIN_ECB+ DBMS_CRYPTO.PAD_NONE;
以下为目前包中支持的常量:
支持的加密算法:ENCRYPT_DES、ENCRYPT_3DES、ENCRYPT_3DES_2KEY、ENCRYPT_AES128、ENCRYPT_AES192、ENCRYPT_AES256、ENCRYPT_RC4。
支持的散列算法:HASH_MD5、HASH_SH1、HASH_SH256、HASH_SH384、HASH_SH512。
支持的模式:CHAIN_ECB、CHAIN_CBC、CHAIN_CFB、CHAIN_OFB。
支持的 pad 模式:PAD_PKCS5、PAD_NONE。
使用加密包块加密算法时指定的 key 长度必须足够,大于等于算法所需密钥长度,超出长度部分忽略,长度不足将会报错处理。
41.3 举例说明
使用包内的过程和函数之前,如果还未创建过系统包。请先调用系统过程创建系统包。
SP_CREATE_SYSTEM_PACKAGES (1,‘DBMS_CRYPTO’);
SP_CREATE_SYSTEM_PACKAGES (1,‘DBMS_OUTPUT’);
SP_CREATE_SYSTEM_PACKAGES(1,‘UTL_RAW’);
SP_CREATE_SYSTEM_PACKAGES(1,‘UTL_I18N’);
SET SERVEROUTPUT ON; //DBMS_OUTPUT.PUT_LINE需要设置这条语句,才能打印出消息
执行完上述命令之后,按照如下案例可以进行加密
select to_char( DBMS_CRYPTO.ENCRYPT(
UTL_I18N.STRING_TO_RAW ( ‘123456’, ‘UTF8’ ),
DBMS_CRYPTO.ENCRYPT_AES128 + DBMS_CRYPTO.CHAIN_ECB + DBMS_CRYPTO.PAD_PKCS5,
UTL_I18N.STRING_TO_RAW ( ‘lskN06OFVwOzjlyT’, ‘UTF8’ )
))
如果执行的时候提示无法解析访问的表达式,说明该版本可能较低,没有相应的包,可以通过以下路径查找
如果确实没有相应的变量,需要做升级操作,具体版本应该是23年5月份之后的版本都有
文章
阅读量
获赞