119

md5 に関するいくつかのドキュメントを読んだところ、128 ビットと書かれていましたが、なぜ 32 文字なのですか? 文字を計算できません。

  • 1バイトは8ビット
  • 1文字が1バイトの場合
  • 128ビットは128/8 = 16バイトですよね?

編集:

SHA-1 は 160 ビットを生成するので、何文字になりますか?

4

9 に答える 9

122

16進数表現として32文字、つまり1バイトあたり2文字。

于 2011-06-11T17:03:23.890 に答える
41

いくつかの回答を 1 つの投稿に要約したかったのです。

まず、MD5 ハッシュを文字列ではなく、16 進数と考えてください。したがって、各桁は 16 進数 (0 ~ 15 または 0 ~ F) であり、8 ビットではなく 4 ビットを表します。

さらに、1 バイトまたは 8 ビットは 2 つの 16 進数で表されます (例: b' 1111 1111' = 0xFF= ) 255

MD5 ハッシュの長さは 128 ビットで、通常は 32 桁の 16 進数で表されます。

SHA-1 ハッシュの長さは 160 ビットで、通常は 40 桁の 16 進数で表されます。

SHA-2 ファミリーの場合、ハッシュ長は事前に決められたセットの 1 つになると思います。したがって、SHA-512 は 128 桁の 16 進数で表すことができます。

繰り返しますが、この投稿は以前の回答に基づいています。

于 2013-04-16T16:19:23.480 に答える
32

16 進数の「文字」(ニブル) は「文字」とは異なります

ビット対バイト、対文字を明確にするために。

  • 1バイトは8ビットです(私たちの目的のため)
  • 8 ビットで2**8可能な組み合わせを提供: 256 の組み合わせ

16進文字を見ると、

  • の 16 の組み合わせ[0-9] + [a-f]: 全範囲0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
  • 16 は 256 より小さいので、1 つの 16 進文字は 1バイトを格納しません。
  • 16 は2**4: 1 つの 16 進文字が 1 バイト (半バイト) に 4 ビットを格納できることを意味します。
  • 2**8したがって、2 つの 16 進文字は、8 ビットの組み合わせを格納できます。
  • 16 進文字として表されるバイト[0-9a-f][0-9a-f]は、バイトの両方の半分を表します (半バイトをニブルと呼びます)。

通常のシングルバイト文字を見ると(ここではマルチバイト文字とワイド文字は完全にスキップします)。

  • 16 をはるかに超える組み合わせを保存できます。
  • 文字の能力はエンコーディングによって決定されます。たとえば、バイト全体を保存する ISO 8859-1 は、このすべてのものを保存します
  • そのすべてが2**8範囲全体を占めます。
  • の 16 進文字がmd5()すべてを格納できる場合、すべての小文字、すべての大文字、すべての句読点と 、¡°ÀÐàð(改行とタブ) のような空白文字、および制御文字 (できる) が表示されます。見ることすらできず、その多くは使用されていません)。

したがって、それらは明らかに異なっており、それが違いの最良の内訳を提供することを願っています.

于 2017-01-12T16:17:38.153 に答える
29

MD5は16進数(0-15 / 0-F)を生成するため、それぞれ4ビットです。128/4=32文字。

SHA-1は16進数(0-15 / 0-F)も生成するため、160/4=40文字です。

(これらは数学演算であるため、ほとんどのハッシュ関数の出力は通常、16進数で表されます。)

あなたはおそらく8ビットのASCIIテキスト文字を考えていたでしょう。

于 2011-06-11T17:04:35.690 に答える
9

これは32の16進文字です-1つの16進文字は4ビットです。

于 2011-06-11T17:03:36.893 に答える
3

これらは16進数であり、文字ではありません。1桁=4ビット。

于 2011-06-11T17:03:40.240 に答える
2

それらは実際には文字ではなく、16進数です。

于 2011-06-11T17:04:02.737 に答える