md5に関するドキュメントをいくつか読んだところ、128ビットと書かれていましたが、なぜ32文字なのですか?文字を計算できません。
- 1バイトは8ビットです
- 1文字が1バイトの場合
- それなら128ビットは128/8 = 16バイトですよね?
編集:
SHA-1は160ビットを生成しますが、文字数はいくつですか?
md5に関するドキュメントをいくつか読んだところ、128ビットと書かれていましたが、なぜ32文字なのですか?文字を計算できません。
編集:
SHA-1は160ビットを生成しますが、文字数はいくつですか?
((1 << (n*4))-1).bit_length()
は次の
回答:
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バイト(1/2バイト)に4ビットを格納できることを意味します。2**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テキスト文字を考えていたでしょう。