我需要得到一个对象的base64编码的MD5散列,其中该对象是存储为文件fname的图像。
我试过这个:
def get_md5(fname):
hash = hashlib.md5()
with open(fname) as f:
for chunk in iter(lambda: f.read(4096), ""):
hash.update(chunk)
return hash.hexdigest().encode('base64').strip()
但是,我不认为这是正确的,因为它返回的字符串包含太多字符。我的理解是它需要24个字符长。我明白了
NjJiM2RlOWMzOTYxYmM3MDI5Y2Q1NzdjOTQ5YWRlYTQ=
我也尝试过其他一些类似的方法,例如,不做块循环的方法。它们都返回相同的字符串。
(我以后需要base64编码的MD5散列的操作失败了,我想这就是原因所在。)
首先,base64编码使字符串更长。(将IPython与Python 3结合使用的示例):
使用base64编码,每6位输入可获得8位输出。
base64字母表使用64个(或2**6)不同的符号。 通常包括小写和大写字母,数字0-9。这将留下两个额外的必需符号和一个焊盘字符。 通常,
+
和/
用作符号,但也有一些变化。尤其是因为在UNIX或MS-Windows文件名中不允许使用/
。其次,使用十六进制表示法将字节字符串的长度加倍;一个字节的十六进制表示法可以在00和FF之间变化。示例(再次使用IPython和Python 3):
如果您无论如何都要使用base64编码,那么使用
hexdigest()
是没有意义的。我可以通过使用digest()而不是hexdigest()来实现它。最后一行变成:
结果是24个字符长,被googlecloudstoragetransfer接受,它需要一个base64编码的MD5散列。
相关问题 更多 >
编程相关推荐