python 中的不同长度的 MD5 校验和
Varying length of MD5 checksum in python
我使用以下代码来计算 MD5 哈希码的二进制表示。
MD5 总是 128 个字节,bin
returns 是以“0b”开头的字符串。因此,md5_bin
的长度必须始终为130,但是当我运行程序时,它在128和130之间变化,在[=14的不同值上=].
md5_bin = bin(int(hashlib.md5(random_str).hexdigest(),16))`
print len(md5_bin)
当然,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)
我使用以下代码来计算 MD5 哈希码的二进制表示。
MD5 总是 128 个字节,bin
returns 是以“0b”开头的字符串。因此,md5_bin
的长度必须始终为130,但是当我运行程序时,它在128和130之间变化,在[=14的不同值上=].
md5_bin = bin(int(hashlib.md5(random_str).hexdigest(),16))`
print len(md5_bin)
当然,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)