0

わかりました、私は少し混乱しています。MessageDigestを使用してパスワードをMD5ハッシュとしてデータベースに保存し、ユーザーがログインしようとしたときにハッシュを引き出してユーザーのパスワードを確認しようとしています。

したがって、ユーザーがregister.jspで登録するとき、私はこのコードを使用して、パスワード(コードでは「password」と呼ばれる文字列)をハッシュ(「hashtext」と呼ばれる)に変換します。

MessageDigest m = MessageDigest.getInstance("MD5");
m.reset();
m.update(password.getBytes());
byte[] digest = m.digest();
BigInteger bigInt = new BigInteger(1,digest);
String hashtext = bigInt.toString(16);

while(hashtext.length() < 32 ){
  hashtext = "0"+hashtext;
}

次に、ユーザーがログインしようとしたときに入力したパスワードを確認する方法を管理する必要があります。別のページlogin.jspがあります。ここでは、入力したパスワードに対して上記とまったく同じコードを実行し、データベースから取得したハッシュに対して結果を確認します。

ただし、これは機能しません。これは、新しいMessageDigestオブジェクトが作成されたため(MessageDigest.getInstance( "MD5");)、アルゴリズムの動作が異なるためだと思います。

login.jspでregister.jspと同じMessageDigestオブジェクトが使用されていることを確認する必要がありますか?

4

1 に答える 1

0

ただし、これは機能しません。これは、新しいMessageDigestオブジェクトが作成されたため(MessageDigest.getInstance( "MD5");)、アルゴリズムの動作が異なるためだと思います。

本当じゃない。


login.jspでregister.jspと同じMessageDigestオブジェクトが使用されていることを確認する必要がありますか?

いいえ。


あなたの問題は他の何かによって引き起こされています。おそらく、初期パスワードのハッシュをDBに保存しなかったか、入力したパスワードのハッシュと比較しなかったか、またはで異なるデフォルトの文字セットを使用するシステムでハッシュを比較していますgetBytes()。結論を出す前に、実際のハッシュ値を確認してください。

于 2011-05-13T19:28:54.267 に答える