早期Oracle11g中有个简单办法,调用包DBMS_OBFUSCATION_TOOLKIT.MD5,就可以实现。但是Oracle21无此包,且手工将11g中的copy到21c中创建好包,然后执行报错。 那21c中如何实现md5函数呢?
3条回答 默认 最新
专家-皆知 2023-12-24 19:42关注引自微信小程序:皆我百晓生:
在Oracle 21c中,可以使用DBMS_CRYPTO包来实现MD5哈希函数。以下是一个示例代码:
-- 创建存储过程 CREATE OR REPLACE PROCEDURE md5_hash ( p_text IN VARCHAR2, p_hash OUT VARCHAR2 ) AS l_hash_raw RAW(2000); BEGIN -- 将输入的文本转换为RAW类型 l_hash_raw := DBMS_CRYPTO.HASH ( src => UTL_I18N.STRING_TO_RAW(p_text, 'AL32UTF8'), typ => DBMS_CRYPTO.HASH_MD5 ); -- 将RAW类型转换为十六进制字符串 p_hash := LOWER (RAWTOHEX(l_hash_raw)); END; / -- 测试存储过程 DECLARE l_hash VARCHAR2(32); BEGIN md5_hash('Hello World', l_hash); DBMS_OUTPUT.PUT_LINE('MD5 Hash: ' || l_hash); END; /在代码中,创建了一个名为md5_hash的存储过程,该过程接受一个输入参数p_text,表示要计算MD5哈希的文本,以及一个输出参数p_hash,表示计算得到的MD5哈希值。
在存储过程内部,使用DBMS_CRYPTO.HASH函数来计算MD5哈希值。将输入的文本通过UTL_I18N.STRING_TO_RAW函数转换为RAW类型,然后传递给DBMS_CRYPTO.HASH函数,并指定哈希算法为DBMS_CRYPTO.HASH_MD5。
最后,将计算得到的RAW类型哈希值转换为十六进制字符串,使用LOWER(RAWTOHEX())函数将RAW类型哈希值转换为小写的十六进制字符串。
在测试部分,调用md5_hash存储过程并输出计算得到的MD5哈希值。
请注意,为了使用DBMS_CRYPTO包,需要确保数据库用户具有正确的权限。
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用