2012-02-25 12 views
1

ユニコード文字列のSHA1ハッシュを取得しようとしました。一部の中国語文字列 がEclipseのAndroid Javaコードにあります。私は、通常のMessageDigestクラス と、Webからのコードのいくつかの16進変換を使用しました。ユニコード用Java SHA1?

ハッシュとその16進数の変換が正しいことを確認する方法を知りたいですか? その中国語の文字列をいくつかのオンラインハッシュコンバータに挿入しましたが、 のすべてが異なるハッシュを生成しました。同じカバー文字は、 ASCII文字列でうまく動作します。

私はこれで初心者ですので、いくつかの指摘に感謝します!

br、perza

答えて

4

「正しい」とは何ですか? SHA-1などのハッシュは、テキストではなく、バイナリのデータを処理します。テキストからバイナリに変換するさまざまな方法があります。

ここで目的は何ですか?あなたは何か他のコードが生成するハッシュマッチを作らなければなりませんか?その場合は、他のコードがテキストをバイナリに変換するために使用するエンコーディングを確認してください。それがコードと一致する場合は、自由に手をつけてください - どちらもUTF-8またはUTF-16を使用することをお勧めします。どちらもJavaに存在することが保証されています。 Unicode文字レパートリー全体をカバーします。

+0

アイデアは、サーバーにハッシュコードを格納することです。ユーザーが異なるハンドセットからログインすると、ハッシュのみがサーバーに渡されます。したがって、異なるOS間で同じハッシュを生成する必要があります。ここで私の初心者を赦してください。しかし、これは純粋なアスキーでしか動作しないようです。それは本当ですか?したがって、私は変換する必要があると仮定します。最初にbase64を実行し、次にSHAをプラットフォーム間で互換性があるようにしますか? – perza

+0

@perza:いいえ、絶対にありません。テキストをバイナリに一貫して変換してから、UTF-8またはUTF-16を使用するのが適切でしょう。すべてのハンドセット(およびサーバー)のコードが同じエンコーディングを使用していることを確認できれば、すべてうまくいくでしょう。 –

+0

だから私は、オンラインのハッシュジェネレータは、ユニコード文字列を正しく処理することはできませんし、異なる結果を生成すると仮定します。さて、私はそれが十分に良い答えだと信じています:) – perza

0

「オンラインハッシュコンバーター」とはどういう意味ですか?

一部のUnicode-StringのSHA1ハッシュを計算した場合、ハッシュからStringを戻すことはできません。これがハッシュ関数の鍵であり、その「一方向」です。

別のSHA実装を使用して、結果と同じハッシュを取得するかどうかを確認できます。

+0

おそらく、正しいフレーズはhttp://www.nitrxgen.net/hashgen/のような「オンラインハッシュジェネレータ」でしょう。 – perza

関連する問題