为什么不同工具的哈希码值不同?
Why hash code values are different for different tools?
我使用 fciv.exe
创建了 .iso
文件的哈希码。我用过MD5和SHA1算法。然后我在 PowerShell 中找到了 Get-filehash -Path "c:\MyProject.iso" -Algorithm Sha1
cmdlet,因为我使用它非常简单。
但是这两种工具都创建了不同的哈希码。哈希算法在所有工具中都应该是唯一的。至少那是我的理解 - 我是对的吗?或者这是预期的行为?
更新:
我已经使用 fciv.exe 和 Powershell.
获取了一个示例文件并为其创建了哈希值
Fciv.exe 创建于 Sha1
之后
6d9Rar2xh+B5/eEE96pO15EDji0=
在 Sha1 之后创建的 Powershell
E9DF516ABDB187E079FDE104F7AA4ED791038E2D
是相同的哈希码,但是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
我使用 fciv.exe
创建了 .iso
文件的哈希码。我用过MD5和SHA1算法。然后我在 PowerShell 中找到了 Get-filehash -Path "c:\MyProject.iso" -Algorithm Sha1
cmdlet,因为我使用它非常简单。
但是这两种工具都创建了不同的哈希码。哈希算法在所有工具中都应该是唯一的。至少那是我的理解 - 我是对的吗?或者这是预期的行为?
更新: 我已经使用 fciv.exe 和 Powershell.
获取了一个示例文件并为其创建了哈希值Fciv.exe 创建于 Sha1
之后6d9Rar2xh+B5/eEE96pO15EDji0=
在 Sha1 之后创建的 Powershell
E9DF516ABDB187E079FDE104F7AA4ED791038E2D
是相同的哈希码,但是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