技术点 :
1.1 DBMS_OBFUSCATION_TOOLKIT.MD5
DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数,但偶在使用select DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =>'abc') a from Dual时,却有错误提示,看来该函数只能直接在程序包中调用,不能直接应用于SELECT语句。
2.2 Utl_Raw.Cast_To_Raw
DBMS_OBFUSCATION_TOOLKIT.MD5返回的字串,是RAW类型,要正确显示,需要经过Utl_Raw.Cast_To_Raw转换
举例:
使用函数实现:
1、创建函数
CREATE OR REPLACE FUNCTION GET_MD5
( p_str in varchar2)
RETURN varchar2 IS
BEGIN
RETURN Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => Upper(P_Str)));
END;
2、select get_md5('you password') from dual;
注意得到的md5字符串都是大写,如果数据库中存在的是小写,需要lower转换一下(比如urs)
使用存储过程实现:
1、创建存储过程
CREATE OR REPLACE PROCEDURE get_md5
(
i_str in varchar2,
o_str out varchar2
)
is
begin
o_str :=Utl_Raw.Cast_To_Raw(DBMS_OBFUSCATION_TOOLKIT.MD5(input_string => i_str));
end get_md5;
2、调用存储过程
declare
i_str varchar2(32);
o_str varchar2(32);
begin
i_str := '1111';
get_md5(i_str, o_str);
dbms_output.put_line(o_str);
end;