用 python 转换 md5sum

Converting md5sum with python

我知道如何找到文件的校验和:

    # Print checksum of the file
    file = os.popen("md5sum -t " + indir + "/" + binfile)
    checksum = file.read().split(' ')[0]
    print "Checksum of " + binfile + " is " + checksum

但是,校验和是一个包含 32 个字符的字符串。
现在,我想将此校验和转换为 16 个字符的字符串,这样每个字符将代表校验和中的 2 个字符(例如,“63”将是 ascii 字符 0x63)。
我该怎么做?

为什么不直接使用 hashlib

当您使用 hashlib 兼容的散列实现(例如 hashlib.md5 时),散列对象会提供一个方法 digest() 来执行您想要的操作。

示例:

>>> import hashlib
>>> h = hashlib.md5("something")
>>> h.digest()
'C{\x93\r\xb8K\x80y\xc2\xdd\x80Jq\x93k_'
>>> hextxtdigest = h.hexdigest()
>>> hextxtdigest
'437b930db84b8079c2dd804a71936b5f'
>>> # The next line reinvents the wheel.
>>> whatyouwant = "".join([chr(int(hextxtdigest[x:x + 2], 16)) for x in xrange(0, len(hextxtdigest), 2)])
>>> whatyouwant == h.digest()
True

我建议您使用 digest() 方法,避免重新发明轮子。


编辑:

要使用它从文件构建校验和,您通常会做类似的事情(伪python)

import hashlib
h = hashlib.md5()
open some file ...
read some bytes from file
h.update(those bytes read)
repeat read-and-update until end of file ...
close file

在此之后,散列对象h 将准备好获取您想要的摘要。有关更多信息,请参阅标准库文档 (Python 2, Python 3)。