oracle实现aes解密_ORACLE 字段AES算法加密、解密函数索引

本文介绍了在Oracle中使用DBMS_CRYPTO包实现AES加密和解密的方法,包括加解密函数的创建以及如何处理中文乱码问题。还展示了如何在表中应用这些函数,并创建索引来提高查询性能。
摘要由CSDN通过智能技术生成

--我这里使用的是utl_i18n.string_to_raw进行数据类型的转换,这是因为encrypt函数不但需要raw型数据,而且还需要使用专门的字符集—AL32UTF8,这里如果使用utl_raw.cast_to_raw,则会出现“ORA-06512”错误。

--只需要对解密函数写deterministic确定性函数

grant execute on SYS.DBMS_CRYPTO to enc;

create or replace function enc.encrypt(v_string in varchar2) return varchar2 is

encrypted_raw RAW (2000);

encryption_type PLS_INTEGER := SYS.DBMS_CRYPTO.ENCRYPT_DES + SYS.DBMS_CRYPTO.CHAIN_CBC + SYS.DBMS_CRYPTO.PAD_PKCS5;

v_key raw(128) := utl_i18n.string_to_raw( 'artos0011', 'AL32UTF8' );

begin

encrypted_raw := DBMS_CRYPTO.ENCRYPT

(

src => UTL_I18N.STRING_TO_RAW (v_string,'AL32UTF8'),

typ => encryption_type,

key => v_key

);

return RAWTOHEX(encrypted_raw);

end encrypt;

/

create or replace function enc.decrypt(v_str in varchar2) return varchar2 is

decrypted_raw raw(2000);

encryption_type PLS_INTEGER := SYS.DBMS_CRYPTO.ENCRYPT_DES + SYS.DBMS_CRYPTO.CHAIN_CBC + SYS.DBMS_CRYPTO.PAD_PKCS5;

v_key raw(128) := utl_i18n.string_to_raw( 'artos001', 'AL32UTF8' );

begin

decrypted_raw := DBMS_CRYPTO.Decrypt

(

src => HEXTORAW(v_str),

typ => encryption_type,

key => v_key

);

return UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');

end decrypt;

/

s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值