Oracle的AES加密與解密用法


Oracle的AES加密與解密用法
2013年12月11日 11:50:35 iteye_751 閱讀數:428
--加密字符串
create or replace function des3_enc
(
input varchar2
)
return varchar2
is
i_data varchar2(128);
v_in varchar2(255);
i_key varchar2(128);
raw_input RAW(128) ;
key_input RAW(128) ;
decrypted_raw RAW(2048);
begin
--判斷是否為空
if input is null then
return null;
else if input='' then
return '';
end if;
end if;

--key,至少要16位
i_key:= 'abcdef0123456789';

--要加密信息
i_data:= input;
v_in := rpad(i_data,(trunc(length(i_data)/8)+1)*8,chr(0));
--字符轉成RAW
raw_input := UTL_RAW.CAST_TO_RAW(v_in);
key_input := UTL_RAW.CAST_TO_RAW(i_key);
dbms_obfuscation_toolkit.DES3Encrypt(input => raw_input,key => key_input,encrypted_data => decrypted_raw);

--加密信息轉成字符
return to_char(rawtohex(decrypted_raw));

end des3_enc;

 


--解密字符串
create or replace function des3_dec
(
input varchar2
)
return varchar2
is
i_data varchar2(2048);
i_key varchar2(2048);
v_in varchar2(2048);
begin
--判斷是否為空
if input is null then
return null;
else if input='' then
return '';
end if;
end if;

--key,至少要16位
i_key:= 'abcdef0123456789';

--要解密的信息
i_data := input;

dbms_obfuscation_toolkit.DES3DECRYPT(input_string => UTL_RAW.CAST_TO_varchar2(i_data),key_string => i_key,decrypted_string=> v_in);
v_in := rtrim(v_in,chr(0));

--返回解密信息
return v_in;

end des3_dec;

 

--觸發器,用於在增加、修改時自動加密字段,查詢時需要手動調用解密函數進行解密。
create or replace trigger enc_trigger
before insert or update on scott.dept
for each row
begin
select des3_enc(:new.dname) into :new.dname from dual;
end enc_trigger;

 


--使用示例:
insert into dept values (50,'test','test');
commit;
select des3_dec(dname) from dept where deptno=50;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM