Oracle加密解密
一、定义DES加密函数
加密函数:encrypt_des
CREATE OR REPLACE FUNCTION encrypt_des(p_text VARCHAR2, p_key VARCHAR2)
RETURN VARCHAR2 IS
v_text VARCHAR2(4000);
v_enc VARCHAR2(4000);
raw_input RAW(128);
key_input RAW(128);
decrypted_raw RAW(2048);
BEGIN
v_text := rpad(p_text
,(trunc(length(p_text) / 8) + 1) * 8
,chr(0));
raw_input := utl_raw.cast_to_raw(v_text);
key_input := utl_raw.cast_to_raw(p_key);
dbms_obfuscation_toolkit.desencrypt(input => raw_input
,key => key_input
,encrypted_data => decrypted_raw);
v_enc := rawtohex(decrypted_raw);
dbms_output.put_line(v_enc);
RETURN v_enc;
END;
二、定义DES解密函数
解密函数:
CREATE OR REPLACE FUNCTION decrypt_des(p_text VARCHAR2, p_key VARCHAR2)
RETURN VARCHAR2 IS
v_text VARCHAR2(2000);
BEGIN
dbms_obfuscation_toolkit.desdecrypt(input_string => utl_raw.cast_to_varchar2(p_text)
,key_string => p_key
,decrypted_string => v_text);
v_text := rtrim(v_text
,chr(0));
dbms_output.put_line(v_text);
RETURN v_text;
END;
三、测试
3.1、加密测试
select encrypt_des('18772637634', 'tzq12345') from dual;
得到结果:80223CE4389D8BC1C866FDA7BF4811A5
3.2、解密测试
select decrypt_des('80223CE4389D8BC1C866FDA7BF4811A5', 'tzq12345') from dual;
得到结果:18772637634