簡體   English   中英

python中MD5校驗和的長度變化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM