如何将Google Cloud Storage base64 md5sum转换为十六进制版本?

时间:2016-01-19 04:12:36

标签: python google-cloud-storage

Google云端存储使用base64编码值表示md5hash个对象。

如何将这些值转换为md5sum报告的十六进制版本?

3 个答案:

答案 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)

来自GCS的

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