当使用oracle表单生成md5哈希时,我得到的结果与tomcat给出的结果不同。
使用tomcat摘要时,我得到:
C:\apache-tomcat-6.0.26\bin>digest -a md5 mypass
mypass:a029d0df84eb5549c641e04a9ef389e5
使用oracle表单时,我得到:
a029d0dfbfeb5549c641e04abff3bfe5
这是代码:
Declare
v_checksum varchar2( 32 );
v_hex_value varchar2( 32 );
begin
v_checksum := SYS.DBMS_OBFUSCATION_TOOLKIT.MD5( input_string => 'mypass' );
SELECT LOWER( RAWTOHEX( v_checksum ) )
INTO v_hex_value
FROM dual;
:res := v_hex_value;
end;
他们为什么不给出相同的结果?我的代码有问题吗?
答案 0 :(得分:2)
您运行的是哪个版本的Oracle?您的代码在10.2.0.3.0上给出了很好的答案:
SQL> VARIABLE res VARCHAR2(32);
SQL> Declare
2 v_checksum varchar2( 32 );
3 v_hex_value varchar2( 32 );
4 begin
5 v_checksum:=SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(input_string=>'mypass');
6
7
8 SELECT LOWER( RAWTOHEX( v_checksum ) )
9 INTO v_hex_value
10 FROM dual;
11
12 :res := v_hex_value;
13 end;
14 /
PL/SQL procedure successfully completed
res
---------
a029d0df84eb5549c641e04a9ef389e5
此外,我尝试了其他MD5
函数,并给出了相同的答案:
SQL> DECLARE
2 l_input RAW(16) := utl_raw.cast_to_raw('mypass');
3 BEGIN
4 :res:=lower(rawtohex(dbms_obfuscation_toolkit.md5(input=>l_input)));
5 END;
6 /
PL/SQL procedure successfully completed
res
---------
a029d0df84eb5549c641e04a9ef389e5
答案 1 :(得分:0)
您的代码似乎正确
我也在这里得到a029d0df84eb5549c641e04a9ef389e5 http://md5hashgenerator.com/index.php
并且在sql server中我也得到了相同的
SELECT CONVERT(VARCHAR(32),HashBytes('MD5', 'mypass'),2)