Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 解析Azure Blob内容-MD5_Python_Ruby_Azure_Md5 - Fatal编程技术网

Python 解析Azure Blob内容-MD5

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

以下块是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-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中),并将其转换为Linux
md5sum
实用程序所期望的


对于这个特定的文件,等效的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*')