2016-05-22 27 views
0

私はログインとパスワードのユーザー出力を受け取り、この変数をハッシュ(ログインとパスワード)する1つのプログラムを作成しています。JavaでMD5をハッシュする?

私はログインからの出力をハッシュするときに動作しますが、ハッシュを試してみると、パスワードの出力は動作しません。

コード:

String login; 
String password; 


login = JOptionPane.showInputDialog("Login : "); 
password = JOptionPane.showInputDialog("Password : "); 

MessageDigest m; 


try 
{ 
m = MessageDigest.getInstance("MD5"); 
m.update(login.getBytes(),0,login.length()); 
m.update(password.getBytes(),0,password.length()); 
BigInteger login1 = new BigInteger(1, m.digest()); 
BigInteger password1 = new BigInteger(1, m.digest()); 

login = String.format("%1$032X", login1); 
password = String.format("%1$032X", password1); 

JOptionPane.showMessageDialog(null,"Login : " + login + 
       "\nPassword : " + password); 

//System.out.println("login : "+ login); 
//System.out.println("password : " + password); 
} 

出力:

login : E9CA9D798BA364DFF16C738D03AF6668 
password : D41D8CD98F00B204E9800998ECF8427E 

変数ログインは通常なりますが、ハッシング、私は変数パスワードを作りたい時にパスワードが常に同じ結果を行いますハッシュするときには常に別の結果が得られます。

PS:申し訳ありませんが、悪い英語、私の母国語です。

+0

あなたは 'm.digest()'を連続して2回呼びます... –

+0

私は同じものを使うことはできませんか?それとも新しいものを作る必要がありますか?私はすでに試していたので、うまくいきませんでした。たとえば、別のMessageDigestをm1という名前で作成すると、m1はハッシュするときm.digest()と同じ結果になります。 – Falion

+1

パスワードハッシングにMD5を使用しないでください。暗号化されていません。代わりにbcryptのようなものを使用してください。 –

答えて

2

コメントで指摘したように、ダイジェストをリセットせずに2回呼び出しています。次の使用の前にダイジェストをリセットする必要があります。

try 
{ 
    m = MessageDigest.getInstance("MD5"); 
    m.update(login.getBytes(), 0, login.length()); 
    BigInteger login1 = new BigInteger(1, m.digest()); 
    login = String.format("%1$032X", login1); 

    m.reset(); // <---- Reset before doing the password 
    m.update(password.getBytes(), 0, password.length()); 
    BigInteger password1 = new BigInteger(1, m.digest()); 
    password = String.format("%1$032X", password1); 

    System.out.println(login); 
    System.out.println(password); 
} 
+0

うまくいきませんでした。別のコードを試してみると同じことが起こります.2つの変数が同じ結果を一緒にたどります。 – Falion

+2

いいえ、あなたの最初のコードは、パスワードが何であっても、常に同じMD5ハッシュをパスワードに対して与えていました。私のコードはパスワードごとに新しいハッシュを与えています。パスワードを変更すると、新しいハッシュを取得します:) –

+0

これは今働いた!おかげで私の友人:) – Falion

0

ハッシュの文字列を直接抽出するのではなく、Web要素からパスワードを取得していると思います。 D41D8CD98F00B204E9800998ECF8427Eは、「何もない」(長さゼロの文字列)のmd5sumです。通常html(html5)では、パスワードフィールドは十分にインテリジェントなので、データを渡すことはできません。これがうまくいきたいです

+0

それは問題ではないでしょう。彼のコードは、パスワードが何であっても同じMD5ハッシュを与えていました。 –

関連する問題