md5 に関するいくつかのドキュメントを読んだところ、128 ビットと書かれていましたが、なぜ 32 文字なのですか? 文字を計算できません。
- 1バイトは8ビット
- 1文字が1バイトの場合
- 128ビットは128/8 = 16バイトですよね?
編集:
SHA-1 は 160 ビットを生成するので、何文字になりますか?
md5 に関するいくつかのドキュメントを読んだところ、128 ビットと書かれていましたが、なぜ 32 文字なのですか? 文字を計算できません。
編集:
SHA-1 は 160 ビットを生成するので、何文字になりますか?
16進数表現として32文字、つまり1バイトあたり2文字。
いくつかの回答を 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 進数で表すことができます。
繰り返しますが、この投稿は以前の回答に基づいています。
ビット対バイト、対文字を明確にするために。
2**8
可能な組み合わせを提供: 256 の組み合わせ16進文字を見ると、
[0-9] + [a-f]
: 全範囲0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f
2**4
: 1 つの 16 進文字が 1 バイト (半バイト) に 4 ビットを格納できることを意味します。2**8
したがって、2 つの 16 進文字は、8 ビットの組み合わせを格納できます。[0-9a-f][0-9a-f]
は、バイトの両方の半分を表します (半バイトをニブルと呼びます)。通常のシングルバイト文字を見ると(ここではマルチバイト文字とワイド文字は完全にスキップします)。
2**8
範囲全体を占めます。md5()
すべてを格納できる場合、すべての小文字、すべての大文字、すべての句読点と 、¡°ÀÐàð
(改行とタブ) のような空白文字、および制御文字 (できる) が表示されます。見ることすらできず、その多くは使用されていません)。したがって、それらは明らかに異なっており、それが違いの最良の内訳を提供することを願っています.
MD5は16進数(0-15 / 0-F)を生成するため、それぞれ4ビットです。128/4=32文字。
SHA-1は16進数(0-15 / 0-F)も生成するため、160/4=40文字です。
(これらは数学演算であるため、ほとんどのハッシュ関数の出力は通常、16進数で表されます。)
あなたはおそらく8ビットのASCIIテキスト文字を考えていたでしょう。
これは32の16進文字です-1つの16進文字は4ビットです。
これらは16進数であり、文字ではありません。1桁=4ビット。
それらは実際には文字ではなく、16進数です。