使用 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]:
原因是哈希值以 Base64 编码格式表示,而哈希值通常以十六进制字符串表示。
将格式从 Base64 转换为十六进制格式。就像这样,
([System.Convert]::FromBase64String($base64data) | Format-Hex).HexBytes -replace ' ',''
.HexBytes
属性包含由空格分隔的字节,因此-replace ' ', ''
将修剪空格,您将得到一个包含哈希值的大写字符串。