怎样计算一串字符的hash值?


PowerShell交流中心分类: Powershell基础怎样计算一串字符的hash值?
0
yrcz asked 6年 ago

比如,输入字符“123456”
MD5:
E10ADC3949BA59ABBE56E057F20F883E
SHA256:
8D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92

×用微信扫描并分享
2 Answers
0
Best Answer
Mooser Lee 管理员 answered 6年 ago
function Get-Hash{
param(
    [string] $string = $(throw 'string is required'),
     [ValidateSet("MD5", "SHA256")]
    [string] $algorithm
)

$utf8 = new-object -TypeName System.Text.UTF8Encoding
$hasher = [System.Security.Cryptography.HashAlgorithm]::create($algorithm)
$hash = $hasher.ComputeHash($utf8.GetBytes($string))

 -join ( $hash | foreach {"{0:X}" -f $_} )
}

Get-Hash '123456' -algorithm MD5
Get-Hash '123456' -algorithm SHA256
yrcz replied 6年 ago

感谢!!测试几个中文长句,好用!<br><br>但下面这种hash值真心不好复制 <br>get-hash 123456 -algorithm SHA384<br>8D-96-9E-EF-6E-CA-D3-C2-9A-3A-62-92-80-E6-86-CF-0C-3F-5D-5A-86-AF-F3-CA-12-02-0C-92-3A-DC-6C-92<br><br>——-<br><br>能实现下面这种的没有“-”的结果吗?<br>get-filehash "文件地址" -algorithm SHA384<br>8D969EEF6ECAD3C29A3A62928E686CF0C3F5D5A86AFF3CA12020C923AD6C92

Mooser Lee 管理员 replied 6年 ago

已更新

PS_xiao replied 6年 ago

很幸运看到这个帖子。不过答案中给的,生成的MD5值会自动去掉里面0啊。

Mooser Lee 管理员 replied 6年 ago

我认为你说的是-,而不是0。比如“荔非苔”的输出:F81778ACF84FF288BC18F11CA657F41E1C3880A0361BC84F014F5EBA6A07161其中包含了0.

Mooser Lee 管理员 replied 6年 ago

如果你想输出中杠:只需要将函数中的最后一句替换成:( $hash | foreach {“{0:X}” -f $_} ) -join ‘-‘

PS_xiao replied 6年 ago

抱歉,可能是我说的不太清楚。比如例子中得出的“12345”的MD5值和实际不同:实际:E10ADC3949BA59ABBE56E057F20F883E答案:E1ADC3949BA59ABBE56E057F2F883E少了2位,当然也不是全部的0都去掉了。有些疑惑。

PS_xiao replied 6年 ago

看网络上说应该是:字节转换成字符串的时候没有保证是2位宽度造成的,这个在上面的脚本中可以更新吗?@Mooser Lee

大老赖不赖 replied 5月 ago

感谢分享

0
wherewindblow answered 1年 ago

@Mooser Lee 已经答好了,不过最后格式化没有考虑到占位的问题,每次遍历两位十六进制数,但有时会只有一位,导致少了0
即@ps_xiao 说的问题,将join那行改成以下即可

Start your code here
-join ( $hash | foreach {"{0:X2}" -f $_}