Oracle 中的 MD5 (DBMS_OBFUSCATION_TOOLKIT.MD5)

2024-04-30

我正在尝试编写一个函数,从我到处收集的位中获取 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_toolkitSQL 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(使用前将#替换为@)

Oracle 中的 MD5 (DBMS_OBFUSCATION_TOOLKIT.MD5) 的相关文章

随机推荐