Google云端存储使用base64编码值表示md5hash个对象。
如何将这些值转换为md5sum报告的十六进制版本?
答案 0 :(得分:5)
您可以使用binascii.hexlify
(或binascii.b2a_hex
):
import base64
import binascii
print binascii.hexlify(base64.urlsafe_b64decode(md5_base64))
答案 1 :(得分:0)
这是一个使用numpy的简单python配方。
import numpy as np
b=np.frombuffer(base64.urlsafe_b64decode(md5_base64), dtype=np.uint8)
print "".join(["%0x"% l for l in b])
此处md5_base64是Google云端存储报告的值。您可以通过运行ocmmand
来获取该值gsutil stat gs://PATH/TO/FILE
输出应包括Hash(md5)(假设其为non composite object)。
答案 2 :(得分:0)
md5sum
兼容哈希列表对于其他寻找原生命令行/ coreutils检查云存储完整性的方式的其他人 - 例如,您只是通过浏览器访问存储,或者您尝试验证的文件存储在其他地方,您只想生成一个.md5
哈希列表,以便稍后运行md5sum -c
。
对于列出gsutil ls -L
的任何GCS存储桶目录,通过此块管道输出(通过alias
或bash脚本)
awk 'BEGIN { \
decodehash = "base64 -d | xxd -p | tr -d \"\\n\""; \
truncname = "sed \"s/gs:\/\/[a-z0-9_.\-]*\///\" | sed \"s/:$//\"" } \
/Hash \(md5\)/ { print $3 | decodehash; close(decodehash); \
printf " %s\n",fname | truncname; close(truncname) } \
/^gs:\/\// { fname = $0 }'
应在本地使用md5sum -c
生成与验证兼容的输出。基本上它是一个awk
块,用于查找gs://
行和Hash (md5):
行,交换它们的顺序(以便在文件名之前打印哈希),并使用{{1和} base64 -d
将哈希值转换为十六进制字符串。
xxd
我可以将上面的awk代码块保存到文件analogist@project-1111$ ls -L gs://bucket-name/directory
gs://bucket-name/directory/file1.tar.gz
Creation time: Wed, 10 Aug 2016 23:17:06 GMT
[...]
Hash (crc32c): a4X4cQ==
Hash (md5): 2xXYMp7aacmOZ+M57KHEbA==
[..]
gs://bucket-name/directory/file2.tar.gz
Creation time: Wed, 10 Aug 2016 23:26:16 GMT
[...]
Hash (crc32c): JVo9EA==
Hash (md5): XdrBIyCaADR9arH67ucdEA==
[..]
,并且:
md5convert