[英]Varying length of MD5 checksum in python
我使用以下代碼來計算MD5哈希碼的二進制表示形式。
MD5 始終為 128個字節,並且bin
返回以“ 0b”開頭的字符串。 因此, md5_bin
的長度必須始終為130,但是當我運行該程序時,它在128和130之間變化,並且使用random_str
不同值。
md5_bin = bin(int(hashlib.md5(random_str).hexdigest(),16))`
print len(md5_bin)
當然,MD5始終為128個字節,但有時第一個字節為0,有時第二個字節也為0。
這樣想:十進制字符串'15'
和十進制'0015'
都是相同的數字15
。 當您要求Python將int
15
轉換為字符串時,您將得到'15'
而不是'0015
'。 它無法知道您想要的是4位數字,而不是2位數字:
>>> n = int('0015')
>>> str(n)
'15'
bin
。 它無法知道您想要的是128位而不是126位。您給它提供了一個126位的數字,因此它提供了126個二進制數字。
但是您可以告訴它,例如,使用format spec :
bits = format(md5_bin, '0128b')
…或等價地:
bits = '{:0128b}'.format(md5_bin)
如果要使用0b
前綴,則可以添加:
bits = format(md5_bin, '#0128b')
bits = '{md5_bin:#0128b}'.format(md5_bin)
bits = '0b{md5_bin:0128b}'.format(md5_bin)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.