Oracle中常用的加密函数
在java开发中,我们会经常碰到数据或者密码加密的情况,其实在Oracle 中也有一些常用的加密函数,今天就和大家一起学习一下。
今天学习的内容包括:
- DES加密
- DES解密
- MD5加密
下面开始正文。
1、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(300) ; key_input RAW(300) ;--盐最大值 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;
对脚本进行简单说明:
- 盐有长度限制最少8个字符
- Utl_Raw.Cast_To_Raw函数的作用是将每个字节的值用十六进制字符表示出来
2、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、MD5加密
脚本如下:
MD5函数是:DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => 'text') 但是使用的时候需要用:utl_raw.cast_to_raw()转换成十六进制表示
例如:
SELECT utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => '123')) FROM dual ;
函数脚本如下:
CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2) RETURN VARCHAR2 IS retval varchar2(32); BEGIN retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) ; RETURN retval; END;
因为MD5加密是不可逆的,所以没有解密函数,想要解密可以使用一些在线工具,百度MD5解密有很多;
谢谢观看,