2012-03-09 9 views
3

を使用してパスワードをハッシュ私はsalt.Myコードとパスワードのハッシュ値を生成しています:私はミリ秒単位で現在の時刻として、種子を提供することにより、塩を生産している

`String psw="hello"; 
    String tobehashed=""; 
    tobehashed=salt+psw; 
    MessageDigest md = MessageDigest.getInstance("SHA-256"); 
    byte[] digest = md.digest(tobehashed.getBytes()); 
    System.out.println("Digest:"+digest);` 

、私は(塩とは問題を持っていない私は私はランダムな値を得ていますが)塩に関係なく同じハッシュ値を得ています。

実際に塩の目的は異なるハッシュ値を得ることです。 これは私の出力です。 Random nubr:-2098016229(this keeps changing) Digest:[[email protected](this remains same) ワットは解決策ですか?

答えて

4

digest.toString()の結果が出力されます。バイト配列の場合はではありません。は意味のある出力にバイトを変換します。これは単に[B(バイト配列のコード)、@、そして16進アドレスを出力します。 Javaの経験が豊富になると、この出力が頻繁に表示されます。

あなたはダイジェストのバイトを反復処理し、それらを個別に印刷するループを使用する必要があります。

+0

ありがとう、それは私がループを繰り返す場合、私は別の値を得ています。 – user10101

+0

しかし、私は後でハッシュ値を比較する必要がある場合、私は両方のハッシュ値をloop.Is iteratingによって比較する必要がありますか? – user10101

+0

@ user1258724:その回答はhttp://stackoverflow.com/questions/630808/compare-two-arrays-of-primitives-in-javaを参照してください。 –

4

Bする@ ca0b6は、のtoString()表現である、バイト配列の内容ではありません。配列のバイトを反復して個別に出力します。

+0

ハッシュ値を後で比較する必要がある場合は、両方のハッシュ値を繰り返し処理する必要があります。 – user10101

0

参照変数を印刷すると、System.out.println()関数実行toString()オブジェクトクラスからの関数が実行されます。 toString()の出力が示しprintf()て...あなたの参照オブジェクトのデフォルトtoString()戻りHaxCodeによって
。あなたはそれを変更したい場合は
は、あなただけの16進数アドレスを印刷し、あなたのそれぞれのclass.

digest.toString(); 

toString()をオーバーライドする必要があります。 したがって、配列のバイトに対してIterateを使用し、個別に出力する必要があります。