前一段时间需要对Oracle数据进行加解密,因为Oracle中没有类似MySQL的to_base64函数,所以看资料写了类似的函数实现加解密。步骤如下:
首先需要先授权加解密函数,修改 XXXX 为自己的用户,然后在Oracle数据库中执行。
Grant execute on dbms_crypto to XXXX;
Grant execute on dbms_sqlhash to XXXX;
Grant execute on dbms_obfuscation_toolkit to XXXX;
Grant execute on dbms_obfuscation_toolkit_ffi to XXXX;
Grant execute on dbms_crypto_ffi to XXXX;
在Oracle数据库上创建加密函数:
create or replace function my_encryption(
my_str varchar2 ,
my_key varchar2
)
return varchar2
as
my_key_raw raw(16) ;
my_str_raw raw(2000) ;
my_return_str varchar2(2000) ;
my_type pls_integer ;
begin
my_key_raw := utl_i18n.string_to_raw(my_key,'utf8') ;
my_str_raw := utl_i18n.string_to_raw(my_str,'utf8') ;
my_type := dbms_crypto.encrypt_aes128+dbms_crypto.chain_ecb+dbms_crypto.pad_pkcs5 ;
my_str_raw := dbms_crypto.encrypt(src => my_str_raw , typ => my_type, key => my_key_raw) ;
my_return_str := utl_raw.cast_to_varchar2(utl_encode.base64_encode(my_str_raw));
return my_return_str ;
end;
在Oracle数据库上创建解密函数:
create or replace function my_decryption(
my_str varchar2 ,
my_key varchar2
)
return varchar2
as
my_key_raw raw(16) ;
my_str_raw raw(2000) ;
my_return_str varchar2(2000) ;
my_type pls_integer ;
begin
my_key_raw := utl_i18n.string_to_raw(my_key,'utf8') ;
my_str_raw := utl_encode.base64_decode(utl_raw.cast_to_raw((my_str)));
my_type := dbms_crypto.encrypt_aes128+dbms_crypto.chain_ecb+dbms_crypto.pad_pkcs5 ;
my_str_raw := dbms_crypto.decrypt(src => my_str_raw , typ => my_type, key => my_key_raw ) ;
my_return_str := utl_i18n.raw_to_char(my_str_raw,'utf8');
return my_return_str ;
end;
使用例子:
加密
select my_encryption(待加密内容,你的key) from dual;
解密
select my_decryption(待解密内容,你的key) from dual;