比如,输入字符“123456”
MD5:
E10ADC3949BA59ABBE56E057F20F883E
SHA256:
8D969EEF6ECAD3C29A3A629280E686CF0C3F5D5A86AFF3CA12020C923ADC6C92
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
感谢!!测试几个中文长句,好用!<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
已更新
很幸运看到这个帖子。不过答案中给的,生成的MD5值会自动去掉里面0啊。
我认为你说的是-,而不是0。比如“荔非苔”的输出:F81778ACF84FF288BC18F11CA657F41E1C3880A0361BC84F014F5EBA6A07161其中包含了0.
如果你想输出中杠:只需要将函数中的最后一句替换成:( $hash | foreach {“{0:X}” -f $_} ) -join ‘-‘
抱歉,可能是我说的不太清楚。比如例子中得出的“12345”的MD5值和实际不同:实际:E10ADC3949BA59ABBE56E057F20F883E答案:E1ADC3949BA59ABBE56E057F2F883E少了2位,当然也不是全部的0都去掉了。有些疑惑。
看网络上说应该是:字节转换成字符串的时候没有保证是2位宽度造成的,这个在上面的脚本中可以更新吗?@Mooser Lee
感谢分享