11

SHA-256 の定義は、単一の「1」ビットで構成される入力が、「01」バイトのハッシュ値とは異なる、明確に定義されたハッシュ値を持つように見えます(入力のビット長に基づいてパディングが行われるため)。 )。

ただし、エンディアンの問題と、単一ビットでのフィードをサポートしている実装が見つからないという事実により、この正しい値が何であるかを完全に理解することはできません。

では、ビット「1」で構成される1 ビット長の入力の正しいハッシュは何ですか? (8 ビット長の byte[] { 1 } 入力ではありません)。

4

3 に答える 3

11

OK、私自身の実装によると:

1 ビット文字列 "1" :

B9DEBF7D 52F36E64 68A54817 C1FA0711 66C3A63D 384850E1 575B42F7 02DC5AA1

1 ビット文字列「0」 :

BD4F9E98 BEB68C6E AD3243B1 B4C7FED7 5FA4FEAA B1F84795 CBD8A986 76A2A375

0 ビット文字列を含むいくつかの標準的な 8 ビットの倍数入力でこの実装をテストしたところ、結果は正しかった。

(もちろん、この質問のポイントは、最初に上記の出力を検証することだったので、注意して使用してください...)

于 2010-12-12T19:01:08.340 に答える
3

あなたの質問を正しく理解しているかどうかわかりません。

SHA-256 は 64 バイト (=512 ビット) のブロック サイズで動作します。これは、小さい入力を最初にパディングする必要があることを意味します。パディングの結果は次のようになります。

For Bit 1:    1100000000000...00000000001
For Bits 01:  0110000000000...00000000010

この結果が異なるため、次の圧縮関数の結果も異なります。したがって、ハッシュ値は次のとおりです。標準ドキュメントでは、パディングについて非常にわかりやすく説明しています: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf

于 2010-12-12T18:43:13.030 に答える
2

RFC 4634のセクション8には、必ずしも8ビットの倍数ではないデータのハッシュを計算するためのCコードがあります。名前が。であるメソッドを参照してください。SHA*FinalBits(...)

于 2010-12-12T19:29:46.163 に答える