0

我已经.iso使用fciv.exe. 我使用过 MD5 和 SHA1 算法。然后我Get-filehash -Path "c:\MyProject.iso" -Algorithm Sha1在 PowerShell 中找到了 cmdlet,因为我很容易使用它。

但是这两种工具都创建了不同的哈希码。哈希算法在所有工具中应该是唯一的。至少我的理解是这样的——对吗?或者这是一种预期的行为?

更新:我已经使用 fciv.exe 和 Powershell 获取了一个示例文件并为其创建了哈希值。

Fciv.exe 在 Sha1 之后创建

6d9Rar2xh+B5/eEE96pO15EDji0=

在 Sha1 之后创建的 Powershell

E9DF516ABDB187E079FDE104F7AA4ED791038E2D
4

1 回答 1

2

它是相同的哈希码,但Fciv.exe显示为 BASE64 字符串,而Get-FileHash显示为 HEX 字符串:

$Hash=233,223,81,106,189,177,135,224,121,253,225,4,247,170,78,215,145,3,142,45
[Convert]::ToBase64String($Hash)
# 6d9Rar2xh+B5/eEE96pO15EDji0=
[BitConverter]::ToString($Hash)-replace'-'
# E9DF516ABDB187E079FDE104F7AA4ED791038E2D

使用这段代码,您可以将哈希码的 BASE64 表示添加到Get-FileHash输出:

Get-FileHash FileName.iso|
Select-Object Algorithm,
              @{Name='HashHex';Expression='Hash'},
              @{Name='HashBase64';Expression={
                  [Convert]::ToBase64String(@(
                      $_.Hash-split'(?<=\G..)(?=.)'|
                      ForEach-Object {[byte]::Parse($_,'HexNumber')}
                  ))
              }},
              Path
于 2015-09-24T06:21:05.080 回答