質問

私はMD5に関するいくつかのドキュメントを読みました、それは128ビットであると言いましたが、なぜ32文字ですか?文字を計算できません。

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

編集:

SHA-1は160ビットを生成しますが、何文字がありますか?

役に立ちましたか?

解決

32 chars六量表現として、それはバイトあたり2文字です。

他のヒント

私はいくつかの答えを1つの投稿に夏にしたかったのです。

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

それをさらに進めると、1つのバイトまたは8ビットが2ヘクスの数字、例えばB 'で表されます。1111 1111' = 0xFF = 255.

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

SHA-1ハッシュの長さは160ビットで、一般に40ヘクスの数字で表されます。

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

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

ヘックス「キャラクター」(ニブル)は「キャラクター」とは異なります

ビット対バイト、vs文字で明確にすること。

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

あなたがaを見るとき ヘックス文字、

  • 16の組み合わせ [0-9] + [a-f]: :の全範囲 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
  • 16は256未満なので、1つの1ヘクス文字が行われます いいえ バイトを保存します。
  • 16は 2**4: :つまり、1つのヘックス文字がバイト(半分のバイト)に4ビットを保存できることを意味します。
  • したがって、2つのヘックス文字は8ビットを保存できます。 2**8 組み合わせ。
  • ヘックス文字として表されるバイトはです [0-9a-f][0-9a-f] そして、それはバイトの両方の半分を表しています(私たちは半バイトを呼びます ニブル).

あなたがaを見るとき 通常のシングルバイト文字、 (ここでは、マルチバイトとワイドキャラクターを完全にスキップします)

  • 16を超える組み合わせを保存できます。
  • の機能 キャラクター によって決定されます エンコーディング。 たとえば、 バイト全体を保存するISO 8859-1は、これらすべてを保存します
  • そのすべてが全体を取ります 2**8 範囲。
  • anのヘックスキャラクターの場合 md5() それをすべて保存できます、あなたはすべての小文字、すべての大文字、すべての句読点、そしてのようなものを見るでしょう ¡°ÀÐàð, 、Whitespaceのようなホワイトスペース(Newlines、Tabs)、およびコントロール文字(表示さえできませんが、その多くは使用されていません)。

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

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

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

(それらは数学的操作であるため、ほとんどのハッシュ関数の出力は一般に16進数として表されます。)

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

それは32のヘックス文字です-1ヘクス文字は4ビットです。

それらは文字ではなく、六分科です。 1桁= 4ビット。

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

1ヘクス桁 = 1 ニブル (4ビット)

2ヘックス桁 = 1バイト(8ビット)

MD5 = 32ヘクス桁

32ヘクス桁 = 16バイト(32 /2)

16バイト = 128ビット(16 * 8)

SHA-1にも同じことが当てはまりますが、長さは40桁です。

これが役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top