如何匹配 Web URL 上的文件的 MD5 哈希值与下载时的文件

问题描述 投票:0回答:1

使用 Powershell 脚本,我们始终将 WEB URI 上的文件的 HASH 值与下载后的哈希值进行匹配,如果哈希值不匹配,则报告失败。

我现在正在处理以下 URL,我无法将 URI

totmYatp14JwNhBLZwYpog==
上的 HASH MD5 与本地
B68B6661AB69D7827036104B670629A2
上的 MD5 相匹配?.

https://cdn.windwardstudios.com/Archive/23.X/23.3.5/JavaRESTfulEngine-23.3.5.1.zip

以下文件 URL 中提到了

Content-MD5
totmYatp14JwNhBLZwYpog==

https://cdn.windwardstudios.com/?prefix=Archive/23.X/23.3.5/

[![在此处输入图像描述][1]][1]

是否可以匹配

Hash
或任何其他解决方案来确保网页上的文件和下载后的文件匹配?

以下是我尝试过的,但 MD5 不匹配:

标题中相关文件的 MD5 和内容长度如下:

PS C:\Users\HOME> $response = Invoke-WebRequest -Uri "https://cdn.windwardstudios.com/Archive/23.X/23.3.5/JavaRESTfulEngine-23.3.5.1.zip" -Method Head
PS C:\Users\HOME> $response.Headers['Content-MD5']
totmYatp14JwNhBLZwYpog==
PS C:\Users\HOME> $response.Headers['Content-Length']
189583636

但是,当在本地下载相同的文件时,其

content-length
匹配,但
content-md5
不匹配,而它应该匹配:

$filePath = 'C:\Users\HOME\Downloads\JavaRESTfulEngine-23.3.5.1.zip'

# Calculate the MD5 hash of the file
$md5 = Get-FileHash -Path $filePath -Algorithm MD5

Write-Host ("MD5 hash (Content-MD5) of " + $filePath + ": " + $md5.Hash)

$fileInfo = Get-Item $filePath
$fileInfo.Length

正如您从输出中看到的,

content-length
匹配,但
content-MD5
不匹配。

PS C:\Users\HOME> C:\Logs\getkey.ps1
MD5 hash (Content-MD5) of C:\Users\HOME\Downloads\JavaRESTfulEngine-23.3.5.1.zip: B68B6661AB69D7827036104B670629A2
189583636

如何获取 URI

totmYatp14JwNhBLZwYpog==
上的 MD5 来匹配本地
B68B6661AB69D7827036104B670629A2
上的 MD5? [1]:https://i.stack.imgur.com/j72vA.png

powershell curl hash md5 content-length
1个回答
0
投票

原因是哈希值以 Base64 编码格式表示,而哈希值通常以十六进制字符串表示。

将格式从 Base64 转换为十六进制格式。就像这样,

([System.Convert]::FromBase64String($base64data) | Format-Hex).HexBytes -replace ' ',''

.HexBytes
属性包含由空格分隔的字节,因此
-replace ' ', ''
将修剪空格,您将得到一个包含哈希值的大写字符串。

© www.soinside.com 2019 - 2024. All rights reserved.