MD5は128ビットですが、なぜ32文字ですか?
-
26-10-2019 - |
質問
私は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桁です。
これが役立つことを願っています。