Python 解析Azure Blob内容-MD5
以下块是Azure Blob存储在请求XML格式的容器列表时返回的内容Python 解析Azure Blob内容-MD5,python,ruby,azure,md5,Python,Ruby,Azure,Md5,以下块是Azure Blob存储在请求XML格式的容器列表时返回的内容 <Blob> <Name>commits-dump.2015-10-03.tar.gz</Name> <Url>https://ghtstorage.blob.core.windows.net/downloads/commits-dump.2015-10-03.tar.gz</Url> <Properties> <Last-Mo
<Blob>
<Name>commits-dump.2015-10-03.tar.gz</Name>
<Url>https://ghtstorage.blob.core.windows.net/downloads/commits-dump.2015-10-03.tar.gz</Url>
<Properties>
<Last-Modified>Wed, 09 Dec 2015 18:48:28 GMT</Last-Modified>
<Etag>0x8D300C95405378B</Etag>
<Content-Length>189598959329</Content-Length>
<Content-Type>application/octet-stream</Content-Type>
<Content-Encoding/>
<Content-Language/>
<Content-MD5>gzmOYbF+TJGlvQTKPz84PQ==</Content-MD5>
<Cache-Control/>
<BlobType>BlockBlob</BlobType>
<LeaseStatus>unlocked</LeaseStatus>
</Properties>
</Blob>
提交-dump.2015-10-03.tar.gz
https://ghtstorage.blob.core.windows.net/downloads/commits-dump.2015-10-03.tar.gz
2015年12月9日星期三18:48:28 GMT
0x8D300C95405378B
189598959329
应用程序/八位字节流
gzmOYbF+TJGlvQTKPz84PQ==
块状物
解锁
我的问题是:如何解析Content-MD5
字段(在Ruby/Python中),并将其转换为Linuxmd5sum
实用程序所期望的
对于这个特定的文件,等效的md5sum是:
83398e61b17e4c91a5bd4ca3f3f383d
为了回答我自己的问题,下面的Ruby代码可以工作:
irb(main):012:0> require 'base64'
irb(main):013:0> Base64.decode64("gzmOYbF+TJGlvQTKPz84PQ==").each_byte.map { |b| b.to_s(16) }.join == "83398e61b17e4c91a5bd4ca3f3f383d"
=> true
为了回答我自己的问题,以下Ruby代码可以工作:
irb(main):012:0> require 'base64'
irb(main):013:0> Base64.decode64("gzmOYbF+TJGlvQTKPz84PQ==").each_byte.map { |b| b.to_s(16) }.join == "83398e61b17e4c91a5bd4ca3f3f383d"
=> true
您可以从本地文件创建md5,并与azure内容md5进行比较 python中的Bellow代码
def md5(fname):
hash_md5 = hashlib.md5()
with open(fname, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return base64.b64encode(hash_md5.digest()).decode('utf-8')
您可以从本地文件创建md5,并与azure内容md5进行比较 python中的Bellow代码
def md5(fname):
hash_md5 = hashlib.md5()
with open(fname, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return base64.b64encode(hash_md5.digest()).decode('utf-8')
您的问题是如何在Ruby中解析XML?或者是关于如何将
gzmOYbF+TJGlvQTKPz84PQ=
翻译成36679b78e2aebad1bf808e854622d
?后者。我想将gzmOYbF+TJGlvQTKPz84PQ=
转换成36679b78e2aebad1bf808e854622d
。它是Base64编码的。对它进行解码并将其转换为十六进制。是的,但如果你对它进行解码,你就不会得到想要的md5sum。要么总数不对,要么我缺少了其他的翻译步骤。所以@tadman是正确的。然而,我作为示例提供的校验和是错误的。正确的答案是83398e61b17e4c91a5bd4ca3f3f383d
您的问题是如何在Ruby中解析XML?或者是关于如何将gzmOYbF+TJGlvQTKPz84PQ=
翻译成36679b78e2aebad1bf808e854622d
?后者。我想将gzmOYbF+TJGlvQTKPz84PQ=
转换成36679b78e2aebad1bf808e854622d
。它是Base64编码的。对它进行解码并将其转换为十六进制。是的,但如果你对它进行解码,你就不会得到想要的md5sum。要么总数不对,要么我缺少了其他的翻译步骤。所以@tadman是正确的。然而,我作为示例提供的校验和是错误的。正确的方法是83398e61b17e4c91a5bd4ca3f3f383d
在本例中,对二进制数据进行十六进制编码的更快方法是使用unpack('H*')
。在本例中,对二进制数据进行十六进制编码的更快方法是使用unpack('H*')
。