我试图在本地文件上获取CRC32c
校验和,以便将其与gcloud库提供的blob.crc32c进行比较。Google说我应该使用crcmod模块来计算数据的CRC32c
哈希值。在
modifiedFile.txt
已经从Google云存储桶下载到我的本地文件系统。在
这里的目标是,仅当modifiedFile.txt
与远程服务器上的CRC32c
不同时,should_download
设置为true。如果本地文件系统和gcloud Blob都有相同的内容,如何让它们生成匹配的CRC32c
?在
from crcmod import PredefinedCrc
from gcloud import storage
# blob is a gcloud Blob object
should_download = True
with open('modifiedFile.txt') as f:
hasher = PredefinedCrc('crc-32c')
hasher.update(f.read())
crc32c = hasher.digest()
print crc32c # \207\245.\240
print blob.crc32c # CJKo0A==
should_download = crc32c != blob.crc32c
不幸的是,它目前总是失败,因为我实际上不知道如何将我用crcmod
构建的校验和与我在匹配的Blob
对象中看到的属性进行比较。在
来自链接的文档:“CRC32c校验和,如RFC 4960附录B所述;以大端字节顺序使用base64编码”
看起来您没有解码base64字符串。
如果您在Windows计算机上,则需要以二进制模式打开文本文件。
下面是gsutil公共tarball的md5和crc32c示例:
我将在本地复制它以使用:
^{pr2}$CRC值通常显示为无符号32位整数。要转换它:
要从crcmod库获取相同的内容:
如果要将crcmod中的值转换为gcloud/gsutil使用的base64格式:
相关问题 更多 >
编程相关推荐