如何将 Google Cloud Storage base64 md5sum 转换为十六进制版本?
How to convert Google Cloud Storage base64 md5sum to hexadecimal version?
Google 云存储表示 md5hash 使用 base64 编码值的对象。
如何将这些值转换为 md5sum 报告的十六进制版本?
这是一个简单的 python 使用 numpy 的方法。
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 Cloud Storage 报告的值。您可以通过 运行 ocmmand
获取该值
gsutil stat gs://PATH/TO/FILE
输出应该包括 Hash (md5)(假设它是 non composite object)。
您可以使用 binascii.hexlify
(or binascii.b2a_hex
):
import base64
import binascii
print binascii.hexlify(base64.urlsafe_b64decode(md5_base64))
md5sum
来自 GCS
的兼容哈希列表
对于正在寻找本机命令行/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 | decodehash; close(decodehash); \
printf " %s\n",fname | truncname; close(truncname) } \
/^gs:\/\// { fname = [=10=] }'
应该生成与在本地使用 md5sum -c
进行验证兼容的输出。基本上它是一个 awk
块,用于查找 gs://
行和 Hash (md5):
行,交换它们的顺序(以便在文件名之前打印哈希),并使用 base64 -d
和 xxd
将哈希值转换为十六进制字符串。
例子
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==
[..]
我可以将上面的awk代码块保存到文件md5convert
,并且:
analogist@project-1111$ ls -L gs://bucket-name/directory | bash md5convert
db15d8329eda69c98e67e339eca1c46c directory/file1.tar.gz
5ddac123209a00347d6ab1faeee71d10 directory/file2.tar.gz
Google 云存储表示 md5hash 使用 base64 编码值的对象。
如何将这些值转换为 md5sum 报告的十六进制版本?
这是一个简单的 python 使用 numpy 的方法。
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 Cloud Storage 报告的值。您可以通过 运行 ocmmand
获取该值gsutil stat gs://PATH/TO/FILE
输出应该包括 Hash (md5)(假设它是 non composite object)。
您可以使用 binascii.hexlify
(or binascii.b2a_hex
):
import base64
import binascii
print binascii.hexlify(base64.urlsafe_b64decode(md5_base64))
md5sum
来自 GCS
的兼容哈希列表
对于正在寻找本机命令行/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 | decodehash; close(decodehash); \
printf " %s\n",fname | truncname; close(truncname) } \
/^gs:\/\// { fname = [=10=] }'
应该生成与在本地使用 md5sum -c
进行验证兼容的输出。基本上它是一个 awk
块,用于查找 gs://
行和 Hash (md5):
行,交换它们的顺序(以便在文件名之前打印哈希),并使用 base64 -d
和 xxd
将哈希值转换为十六进制字符串。
例子
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==
[..]
我可以将上面的awk代码块保存到文件md5convert
,并且:
analogist@project-1111$ ls -L gs://bucket-name/directory | bash md5convert
db15d8329eda69c98e67e339eca1c46c directory/file1.tar.gz
5ddac123209a00347d6ab1faeee71d10 directory/file2.tar.gz