我有以下代码。我正在使用Oracle 11g。
SELECT DBMS_OBFUSCATION_TOOLKIT.md5 (input => UTL_RAW.cast_to_raw(
FIRST_NAME
||LAST_NAME
)) md5_key ,
FIRST_NAME ,
LAST_NAME
FROM C_NAME_TAB
WHERE PKEY='1234'
我如何调用此代码?我可以直接在sqldeveloper中执行此代码吗?
答案 0 :(得分:26)
在Oracle 12c中,您可以使用函数STANDARD_HASH。它不需要任何额外的权限。
select standard_hash('foo', 'MD5') from dual;
不推荐使用dbms_obfuscation_toolkit(请参阅注释here)。您可以直接使用DBMS_CRYPTO:
select rawtohex(
DBMS_CRYPTO.Hash (
UTL_I18N.STRING_TO_RAW ('foo', 'AL32UTF8'),
2)
) from dual;
输出:
ACBD18DB4CC2F85CEDEF654FCCC4A4D8
如果需要,添加较低的函数调用。更多关于DBMS_CRYPTO。
答案 1 :(得分:3)
我愿意:
select DBMS_CRYPTO.HASH(rawtohex('foo') ,2) from dual;
输出:
DBMS_CRYPTO.HASH(RAWTOHEX('FOO'),2)
--------------------------------------------------------------------------------
ACBD18DB4CC2F85CEDEF654FCCC4A4D8
答案 2 :(得分:2)
@ user755806我不相信你的问题得到了解答。我拿了你的代码,但使用了' foo'示例字符串,添加了较低的函数,并且还发现了返回的哈希的长度。在sqlplus或Oracle的sql developer Java数据库客户端中,您可以使用它来调用值的md5sum。列格式清理演示文稿。
column hash_key format a34;
column hash_key_len format 999999;
select dbms_obfuscation_toolkit.md5(
input => UTL_RAW.cast_to_raw('foo')) as hash_key,
length(dbms_obfuscation_toolkit.md5(
input => UTL_RAW.cast_to_raw('foo'))) as hash_key_len
from dual;
结果集
HASH_KEY HASH_KEY_LEN
---------------------------------- ------------
acbd18db4cc2f85cedef654fccc4a4d8 32
与Linux md5sum命令返回的值相同。
echo -n foo | md5sum
acbd18db4cc2f85cedef654fccc4a4d8 -
答案 3 :(得分:0)
要使用我想要的编码计算CLOB内容字段的MD5哈希,而不将内容重新编码到AL32UTF8,我已使用此代码:
$Attachment | Move-Item -Destination "$dir\subfolder"