2

Javaで「SHA-512」アルゴリズムを使用して、ソルトでハッシュを作成しています。問題は、ハッシュされた文字列には、行を中断する奇妙な文字が常にあり、ハッシュされた文字列を印刷すると、2行で構成されていることです。しかし、SHA-256 を使用すると短くなり、改行文字がありません。

では、SHA-512 を使用すると 2 行になるのはなぜですか?

編集:申し訳ありませんが、新しい行の文字がエンコードされた文字列に含まれていることについて言及しませんでした。だから私のハッシュされた文字列は ".....hvRfXJwYDrnky/uUVzXnxz* \r\n *GFDJ+L3A......" 文字 "\r\n" のようなもので、問題が発生します..

4

2 に答える 2

2

問題は、ハッシュされた文字列に常に奇妙な文字があることです

これは、ハッシュ (バイナリ データ) を、既にエンコードされたテキストであるのように文字列に変換しようとしていることを示しています。

// This is bad!
String text = new String(hashBytes);

ハッシュエンコードされたテキストではなく、単なる生のバイナリ データです。文字列として表すには、hex や base64 などを使用する必要があります。base64 変換には、このパブリック ドメイン ライブラリのようなものを使用できます。例えば:

// This won't lose data - it's reversible...
String base64 = Base64.encodeBytes(hashBytes);

もちろん、これがあなたのコードが行っていることではない場合、この回答は役に立ちませんが、その場合は、コードを質問に投稿してください。

于 2012-08-02T16:22:58.513 に答える
2

ああ、Base64 の行の長さをもっと長く設定する必要があります。通常、Base64 エンコーダーには最大行長があり、その後に改行が追加されます。

sun.misc.BASE64Encoder醜いエンコーダーのようなものです。サブクラス化してオーバーライドできると思いますbytesPerLine。を使用org.apache.commons.codec.binary.Base64します。コンストラクターで行の長さを指定できます。

于 2012-08-02T19:09:49.887 に答える