使用Google的gsutil
命令行工具,我可以通过运行生成文件的md5Checksum
值:
gsutil hash -h c:/folder/filename.ext
生成的md5Checksum
值如下所示:
abf688a738aedee31a1e5462e7a1a650
我想知道是否有办法使用Python的模块之一生成相同的md5Checksum
值,例如checksum
模块。
我试过用:
import hashlib
hashlib.md5(open(full_path, 'rb').read()).hexdigest()
但由此产生的&md5Checksum'值与gsutil hash -h full_path
生成的值不同。
答案 0 :(得分:2)
gsutil
使用标准的MD5生成器。
它可以以两种模式之一运行 - 打印出MD5哈希的十六进制版本或base64版本。
该工具的说明:
NAME
hash - Calculate file hashes
SYNOPSIS
gsutil hash [-c] [-h] [-m] filename...
DESCRIPTION
The hash command calculates hashes on a local file that can be used to compare
with gsutil ls -L output. If a specific hash option is not provided, this
command calculates all gsutil-supported hashes for the file.
Note that gsutil automatically performs hash validation when uploading or
downloading files, so this command is only needed if you want to write a
script that separately checks the hash for some reason.
If you calculate a CRC32c hash for the file without a precompiled crcmod
installation, hashing will be very slow. See "gsutil help crcmod" for details.
OPTIONS
-c Calculate a CRC32c hash for the file.
-h Output hashes in hex format. By default, gsutil uses base64.
-m Calculate a MD5 hash for the file.
通过执行gsutil hash -h
,您希望gsutil
生成Python在您使用hexdigest()
时生成的内容。
让我们创建一个基线,这是我刚刚上传的随机图像。
如果您将其保存到系统中并运行gsutil hash -h
,则应该看到以下内容:
gsutil hash -h ~/Downloads/TPQgK.png
Hashes [hex] for /Users/birryree/Downloads/TPQgK.png:
Hash (crc32c): CE24CAD6
Hash (md5): 71c02116024d9fbd04663f4b9c0a082c
在Python中,您可以使用已有的哈希生成哈希值。
import hashlib
hashlib.md5(open('/Users/birryree/Downloads/TPQgK.png', 'rb').read()).hexdigest()
# output: 71c02116024d9fbd04663f4b9c0a082c
或者,如果您不使用-h
标志,它将以Base64编码生成散列。
gsutil hash /Users/birryree/Downloads/TPQgK.png
Hashes [base64] for /Users/birryree/Downloads/TPQgK.png:
Hash (crc32c): ziTK1g==
Hash (md5): ccAhFgJNn70EZj9LnAoILA==
你可以像这样生成它
import hashlib
hashlib.md5(open('/Users/birryree/Downloads/TPQgK.png', 'rb').read()).digest().encode('base64').strip()
# Out[6]: 'ccAhFgJNn70EZj9LnAoILA=='