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

时间:2018-03-21 08:09:06

标签: 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)

1 个答案:

答案 0 :(得分:8)

当然,MD5总是128字节,但有时第一个字节是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)