DECLARE
l_string NVARCHAR2(600) := '123456';
checksum NVARCHAR2(600);
BEGIN
DBMS_OUTPUT.DISABLE;
DBMS_OUTPUT.ENABLE(1000000);
DBMS_OBFUSCATION_TOOLKIT.md5 (input_string => l_string, checksum_string => checksum);
DBMS_OUTPUT.PUT_LINE(RAWTONHEX(utl_raw.cast_to_raw(checksum)));
END;期望值: e10adc3949ba59abbe56e057f20f883e
但它返回: FFFD00390049FFFD0059FFFDFFFD0056FFFD000FFFFD003E
注意,我希望保持nvarchar2数据类型。来自校验和变量的值被存储在类型为nvarchar2的列中。
我知道md5接受和返回varchar2格式的数据。但是如果有人能帮助我使用nvarchar2数据类型解决这个问题,那就太好了。
NLS_CHARACTERSET = AL32UTF8
发布于 2012-06-19 01:01:36
下面的代码应该可以通过dbms_crypto使用hash()
declare
l_src nvarchar2(100) := '123456';
l_raw_hash raw(100);
begin
l_raw_hash := dbms_crypto.hash(to_clob(l_src), dbms_crypto.HASH_MD5);
dbms_output.put_line(l_raw_hash);
end;结果: E10ADC3949BA59ABBE56E057F20F883E
l_raw_hash将采用原始格式。您可以使用UTL_RAW将其转换为另一种数据类型。只需确保您的显示器显示了正确的字符集,否则看起来会很有趣。
https://stackoverflow.com/questions/10827888
复制相似问题