在python中改变MD5校验和的长度

Ami*_*min 0 python binary md5 hashlib

我使用以下代码来计算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)
Run Code Online (Sandbox Code Playgroud)

aba*_*ert 8

当然,MD5总是128字节,但有时第一个字节是0,偶尔第二个字节也是.

可以这样想:十进制字符串'15'和小数'0015'都是相同的数字15.当你要求Python将其转换int 15为字符串时,你会得到'15',而不是'0015'.它无法知道你想要4位而不是2位数:

>>> n = int('0015')
>>> str(n)
'15'
Run Code Online (Sandbox Code Playgroud)

和它一样bin.它无法知道你想要128位而不是126位.你给它一个126位的数字,所以它给你126个二进制数字.

但你可以告诉它你想要的,例如,格式规范:

bits = format(md5_bin, '0128b')
Run Code Online (Sandbox Code Playgroud)

......或者,等同于:

bits = '{:0128b}'.format(md5_bin)
Run Code Online (Sandbox Code Playgroud)

如果你想要0b前缀,你可以添加:

bits = format(md5_bin, '#0128b')
bits = '{md5_bin:#0128b}'.format(md5_bin)
bits = '0b{md5_bin:0128b}'.format(md5_bin)
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案!但问题是用python 2编写的.你可能会将OP与格式字符串混淆...... (2认同)