擅长:python、mysql、java
<p>下面是gsutil公共tarball的md5和crc32c示例:</p>
<pre><code>$ gsutil ls -L gs://pub/gsutil.tar.gz | grep Hash
Hash (crc32c): vHI6Bw==
Hash (md5): ph7W3cCoEgMQWvA45Z9y9Q==
</code></pre>
<p>我将在本地复制它以使用:</p>
^{pr2}$
<p>CRC值通常显示为无符号32位整数。要转换它:</p>
<pre><code>>>> import base64
>>> import struct
>>> struct.unpack('>I', base64.b64decode('vHI6Bw=='))
(3161602567,)
</code></pre>
<p>要从crcmod库获取相同的内容:</p>
<pre><code>>>> file_bytes = open('/tmp/gsutil.tar.gz', 'rb').read()
>>> import crcmod
>>> crc32c = crcmod.predefined.Crc('crc-32c')
>>> crc32c.update(file_bytes)
>>> crc32c.crcValue
3161602567L
</code></pre>
<p>如果要将crcmod中的值转换为gcloud/gsutil使用的base64格式:</p>
<pre><code>>>> base64.b64encode(crc32c.digest()).decode('utf-8')
'vHI6Bw=='
</code></pre>