如何在PowerShell中将文件的SHA256哈希值与已知值进行比较?

21

如果我已经下载了一个已知SHA256哈希值的文件,我应该如何使用PowerShell检查文件是否与预期的哈希值匹配?

2个回答

38

Get-FileHash命令为文件计算散列值,其默认的哈希算法是SHA256

要计算文件的哈希值:

Get-FileHash .\path\to\foo.zip

这会产生类似于:

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          15DC0502666851226F1D9C0FE352CCAF0FFDEFF2350B6D2D08A90FCD1F610A10       C:\Users\me\path\to\foo.zip

要进行比较,从Get-FileHash的输出中仅提取计算出的哈希值,然后将其作为(带引号的)字符串文字与期望值进行比较。方便的是,这种比较似乎不区分大小写。

(Get-FileHash .\path\to\foo.zip).Hash -eq "15dc0502666851226f1d9c0fe352ccaf0ffdeff2350b6d2d08a90fcd1f610a10"
True

如果您已经在文件中拥有了期望的哈希值,比如 expected-hash.sha256 文件

(Get-FileHash '.\path\to\foo.zip').Hash -eq (Get-Content .\expected-hash.sha256)
True

3
当你已经知道答案时,为什么还要问问题呢?如果想与世界分享思想,可以开启一个博客。;-) - Olaf
13
@Olaf ...因为这是被鼓励的吗? (翻译:这段话询问某人回答自己的问题是否受到鼓励,附上一个链接以供查阅。) - mac
1
好的。今天我学到了一些东西。谢谢你。;-) 现在我很好奇...你花了多长时间找到解决方案? - Olaf
5
翻译成中文:虽然不是很长,但我确实从几个来源综合了一些信息,得出了一个可行的一句话总结,我认为值得分享。 - mac
3
“方便的是,这种比较似乎不区分大小写” - 是的,“-eq”执行不区分大小写的比较。如果您需要对某些内容进行区分大小写的比较,可以使用“-ceq”。 - ABPerson

0

这样怎么样:

Compare-Object -ReferenceObject (Get-Content -Path <path/to/hash-file>) -DifferenceObject (Get-FileHash <path/to/test-file> -Algorithm SHA512)

在这里,<path/to/hash-file> 应该被替换为包含预期哈希的文件路径,而 <path/to/test-file> 应该被替换为用于测试哈希的文件路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接