3

オラクル フォームを使用して md5 ハッシュを生成すると、Tomcat によって得られる結果とは異なる結果が得られます。

tomcat ダイジェストを使用すると、次のようになります。

C:\apache-tomcat-6.0.26\bin>digest -a md5 mypass
mypass:a029d0df84eb5549c641e04a9ef389e5

オラクルフォームを使用しているときに、次のようになります:

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; 

なぜ彼らは同じ結果を出さないのですか? 私のコードに何か問題がありますか?

4

2 に答える 2

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
于 2010-08-26T12:12:35.300 に答える
0

あなたのコードは正しいようです

ここでa029d0df84eb5549c641e04a9ef389e5も取得しますhttp://md5hashgenerator.com/index.php

また、SQLサーバーでも同じようになります

SELECT CONVERT(VARCHAR(32),HashBytes('MD5', 'mypass'),2)
于 2010-08-26T11:32:12.927 に答える