0

Java の MessageDigest を使用してハッシュ プロジェクトを実行しています。ランダムに生成された文字列によって作成されたハッシュとの衝突を作成したいと考えています。文字列が本当にランダムであることを確認しました。ただし、ダイジェストを出力すると、何らかの理由で常に "[B@" で始まり、8 ビットとの衝突を検出しようとすると、明らかにすべてが "[" で始まります。これが私のコードです:

public boolean encrypt(String x) throws Exception {
    System.out.println("x is " + x);
    java.security.MessageDigest d = java.security.MessageDigest.getInstance("SHA-1");
    d.update(x.getBytes());
    d.reset();
    String result = d.digest().toString() + "     ";
    char[] tempCharArray = result.toCharArray();
    String bitArray = "";
    for(int i=0; i< tempCharArray.length; i++){
        bitArray += String.format("%8s", Integer.toBinaryString(tempCharArray[i] &
          0xff)).replace(' ', '0');
    }

    result = bitArray.substring(0,8);
    return result;
}

誰かがこれを以前に見たことがありますか/それを正しくするために何をすべきか知っていますか? ありがとう

4

1 に答える 1

2

コードで奇妙なことをしているようです。

まず、電話します。

String result = d.digest().toString()

..これにより、クラス名、「@」記号、およびハッシュコードで構成されるバイト配列オブジェクトの文字列表現が得られます。配列のクラス名は "[B"であるため、常に "[B@" で始まるものを取得します。

次に、 を呼び出しd.update(x.getBytes())てから、すぐに を呼び出しますd.reset()。最初の問題を修正しても、 の値に関係なく、何も消化していないxため、常に同じ結果、空の文字列 の SHA-1 ハッシュ、つまり が得られda39a3ee5e6b4b0d3255bfef95601890afd80709ます。

于 2015-03-09T13:44:45.443 に答える