我正在尝试编写一个函数,从我到处收集的位中获取 MD5 哈希值。我想获得哈希的小写十六进制表示。到目前为止我有这个:
CREATE OR REPLACE FUNCTION MD5 (
CADENA IN VARCHAR2
) RETURN DBMS_OBFUSCATION_TOOLKIT.VARCHAR2_CHECKSUM
AS
BEGIN
RETURN LOWER(
RAWTOHEX(
UTL_RAW.CAST_TO_RAW(
DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => CADENA)
)
)
);
END;
我不确定函数的返回类型。DBMS_OBFUSCATION_TOOLKIT.VARCHAR2_CHECKSUM
看起来是合适的选择,据我所知它按预期工作,但包定义dbms_obfuscation_toolkit
SQL Developer 显示的内容如下:
SUBTYPE varchar2_checksum IS VARCHAR2(16);
输出有 32 个字符,所以我一定做错了什么。我的问题:
- 正确的类型是什么
RETURN
陈述?
- 我是否进行了不必要的转换来计算哈希值?
干得好:
create or replace function getMD5(
in_string in varchar2)
return varchar2
as
cln_md5raw raw(2000);
out_raw raw(16);
begin
cln_md5raw := utl_raw.cast_to_raw(in_string);
dbms_obfuscation_toolkit.md5(input=>cln_md5raw,checksum=>out_raw);
-- return hex version (32 length)
return rawtohex(out_raw);
end;
32 长度是因为它是 raw(16) 值的十六进制表示。或者,修改上面的内容以输出原始版本并将原始数据存储在 RAW 列中(使用的空间较少,但相信我,您将在未来进行 rawtohex 和 hextoraw 转换)。
Cheers
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)