用 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)。
我知道如何找到文件的校验和:
# 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)。