找回密码
 新建账号

Powershell Get-StringHash 计算字符串哈希值

[复制链接]
php 发表于 2024/9/22 00:04 | 显示全部楼层 |阅读模式
Powershell 内置一个 Get-FileHash 命令,可以用来计算文件内容的哈希值,很多时候我们需要计算字符串的哈希值。
方法一 自己写一个函数 Get-StringHash
  1. <#
  2.     Powershell Get-StringHash 计算字符串的MD5 SHA1 SHA256 SHA384 SHA512哈希值
  3.     @Author 吴先成
  4.     @E-mail ohcc@163.com
  5.     @Param String $String 要计算哈希值的字符串 值可以是数组或单个字符串 参数名可以省略
  6.     @Param String $Algorithm 哈希值算法 MD5 SHA1 SHA256 SHA384 SHA512之一 默认值SHA256
  7.     @Notes 文件需要保存为UTF-8或UTF-16编码 否则会乱码或得到错误的哈希值
  8. #>
  9. Function Get-StringHash{
  10.     Param(
  11.         [String[]][Parameter(Position=0, ValueFromRemainingArguments)]$String,
  12.         [String][ValidateSet("MD5", "SHA1", "SHA256", "SHA384", "SHA512")]$Algorithm="SHA256"
  13.     )
  14.     If($String.Count -ge 1){
  15.         $HashProvider = New-Object -TypeName "System.Security.Cryptography.${Algorithm}CryptoServiceProvider"
  16.         $UTF8Encoding = New-Object -TypeName System.Text.UTF8Encoding
  17.         Write-Output "Algorithm Hash String"
  18.         $String | ForEach-Object {
  19.             $StringHash = [System.BitConverter]::ToString($HashProvider.ComputeHash($UTF8Encoding.GetBytes($_))).ToLower().Replace("-", "")
  20.             Write-Output "$Algorithm $StringHash $_"
  21.         }
  22.     }
  23. }
复制代码
用法举例
  1. Hash-String "foo" "bar" "你好"
  2. Hash-String -Algorithm MD5 -String "foo","bar","你好"
复制代码
如果没有 Powreshell 环境,只有 CMD,不能不借助其它程序直接计算字符串的哈希值。可以使用 Windows 自带的 certutil.exe 计算文件内容的哈希值,将要计算哈希值的字符串保存到文件,再用 certutil.exe 计算文件的哈希值。
  1. certutil.exe -hashfile <file> <algorithm>
复制代码
其中 <file> 是文件路径,即文件地址;<algorithm> 是哈希算法,可以省略,省略算法时使用的算法是 sha1,随着操作系统升级,这个缺省值可能会变。
使用这种方法,要注意文件编码,不要添加添加额外的字符,尤其是空格、换行符、BOM头等不容易发现甚至看不见的字符,要保证文件的内容和原始字符串完全一致。

手机版|轻松E站

GMT+8, 2024/10/7 15:46

快速回复 返回顶部 返回列表