Public/Get-StringHash.ps1
<#
This is a way of hashing strings Please be aware, that algorithms like HMAC need a key that The hashing algorithm should be in this class System.Security.Cryptography # examples # This results in 872e4e50ce9990d8b041330c47c9ddd11bec6b503ae9386a99da8584e9bb12c4 Get-StringHash -inputString "HelloWorld" -hashName "SHA256" # This results in b9e217df88dc1bc96c1e69e1b09a798d6efe0ef69cd3511e7f4becd319fe6036 Get-StringHash -inputString "HelloWorld" -hashName "HMACSHA256" -key "GoGoGo" #> Function Get-StringHash { [cmdletbinding()] param( [Parameter(Mandatory=$true)][String]$InputString ,[Parameter(Mandatory=$true)][String]$HashName ,[Parameter(Mandatory=$false)][String]$Salt = "" ,[Parameter(Mandatory=$false)][String]$Key = "" ,[Parameter(Mandatory=$false)][switch]$Uppercase = $false ,[Parameter(Mandatory=$false)][switch]$KeyIsHex = $false ,[Parameter(Mandatory=$false)][switch]$ReturnBytes = $false ) Process { #----------------------------------------------- # GENERATE BYTES HASH #----------------------------------------------- # Add salt if needed $string = $InputString + $Salt # Choose algorithm: https://learn.microsoft.com/de-de/dotnet/api/system.security.cryptography.hashalgorithm.create?view=net-7.0 $alg = [System.Security.Cryptography.HashAlgorithm]::Create($HashName) # Change key, e.g. for HMACSHA256 if ( $Key -ne "" ) { if ( $KeyIsHex ) { $alg.key = Convert-HexToByteArray -HexString $key } else { $alg.key = [Text.Encoding]::UTF8.GetBytes($key) } } $bytes = $alg.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($string)) #----------------------------------------------- # RETURN #----------------------------------------------- if ( $ReturnBytes -eq $true ) { $bytes } else { # Create bytes from string and hash $res = Convert-ByteArrayToHex -ByteArray $bytes # Transform uppercase, if needed, and return the result if ( $Uppercase ) { $res.ToUpper() } else { $res } } } } |