-1

これは私のコードです。バイト エンコーディングに問題があります。プレーンテキスト文字列を取得してハッシュし、結果を出力しようとすると、めちゃくちゃになります。たとえば、plaintext = "hi" の場合、次のように出力されます。 hash: ?????????1?W?p????=???????&

公開クラス HASHME {

private String hash;
private String salt;

public HASHME(String plaintext) 
{
    try {
    System.setProperty("file.encoding", "UTF-8");
    salt = "salt";
    plaintext = plaintext + salt;
    byte[] bytesOfPlain = plaintext.getBytes("UTF8");

    MessageDigest md = MessageDigest.getInstance("SHA-256");
    byte[] hashedBytes = md.digest(bytesOfPlain);
    hash = new String(hashedBytes, "UTF8");
    System.out.println("hash: " + hash);

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
4

1 に答える 1

4

これが問題です:

byte[] hashedBytes = md.digest(bytesOfPlain);
hash = new String(hashedBytes, "UTF8");

ハッシュの結果は、 UTF-8 でエンコードされたテキストではなく、単なる任意のバイナリ データです。ここで行っていることは、画像ファイルを UTF-8 として解釈して文字列に変換しようとするのと同じくらい無意味です。

ハッシュをテキストに変換する必要がある場合は、 base64または hex を使用してください。(通常、任意のサイズのデータ​​は base64 として転送されますが、ハッシュは通常 16 進数で表示されます。)

于 2013-04-01T19:49:12.660 に答える