【问题标题】:How to convert Google Cloud Storage base64 md5sum to hexadecimal version?如何将 Google Cloud Storage base64 md5sum 转换为十六进制版本?
【发布时间】:2016-01-19 04:12:35
【问题描述】:

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

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

【问题讨论】:

    标签: python google-cloud-storage


    【解决方案1】:

    您可以使用binascii.hexlify(或binascii.b2a_hex):

    import base64
    import binascii
    
    print binascii.hexlify(base64.urlsafe_b64decode(md5_base64))
    

    【讨论】:

    • 我认为导入中有错字;我认为您的意思是“导入base64”。所以不会让我编辑它,因为它允许超过 6 个字符。我更喜欢你的回答,因为它不需要 numpy。
    • @JeremyLewi,你是对的。我相应地更新了答案。感谢您指出这一点。
    【解决方案2】:

    这是一个使用 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 是谷歌云存储报告的值。您可以通过运行 ocmmand 来获取该值

    gsutil stat gs://PATH/TO/FILE
    

    输出应包括哈希 (md5)(假设它是 non composite object)。

    【讨论】:

      【解决方案3】:

      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 $3 | decodehash; close(decodehash); \
              printf "  %s\n",fname | truncname; close(truncname) } \
          /^gs:\/\// { fname = $0 }'
      

      应生成与本地使用md5sum -c 的验证兼容的输出。基本上它是一个awk 块,它查找gs:// 行和Hash (md5): 行,交换它们的顺序(以便在文件名之前打印散列),并使用base64 -dxxd 将散列转换为十六进制字符串。

      示例

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-25
        • 1970-01-01
        • 2021-05-07
        • 2018-03-01
        • 2022-01-12
        • 1970-01-01
        相关资源
        最近更新 更多