Hash készítése szövegből

Érdemes szétnézni a System.Security.Cryptography névtérben is, mert titkosítással, kriptográfiával kapcsolatban sok hasznos osztály található itt. Példaként álljon itt egy függvény, amellyel szövegből tudunk MD5 hasht készíteni:

function ConvertTo-MD5Hash {

param([string] $string)

 

$md5 = new-object -TypeName Security.Cryptography.MD5CryptoServiceProvider

$utf8 = new-object -TypeName System.Text.UTF8Encoding

$result = -join ($md5.ComputeHash($utf8.GetBytes($string)) |

    ForEach-Object {$_.ToString("x2")})

$result

}

A függvény meghívásakor az átadott szöveg MD5 hash-e lesz a kimenet hexa szöveg formában:

PS C:\> ConvertTo-MD5Hash -string kakukk

c3cf61e6cb43dd962ff56b3bb0e0c766

A függvény ebben a formában kis-nagybetű érzékeny, azaz a nagybetűs „Kakukk”-nak más lesz a hash-e:

PS C:\> ConvertTo-MD5Hash -string Kakukk

c67e5b32a59dfd78b5754d4f264d31b2

Az alábbi ConvertTo-Hash függvény általánosabb megoldást ad, itt a -HashAlgorithm dinamikus paraméterrel meg lehet adni, hogy milyen hashalgoritmust szeretnénk használni. Ebben a példában további osztályokat is használtam a System.Security.Cryptography névtérből:

function ConvertTo-Hash {

[cmdletbinding()]

param([string] $string)

 

DynamicParam{

    $ParameterName = 'HashAlgorithm'

    $RuntimeParameterDictionary = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary

    $AttributeCollection = New-Object System.Collections.ObjectModel.Collection[System.Attribute]

 

    $ParameterAttribute = New-Object System.Management.Automation.ParameterAttribute

    $ParameterAttribute.Mandatory = $false

    $ParameterAttribute.Position = 1

 

    $AttributeCollection.Add($ParameterAttribute)

 

    $arrSet = @([System.Security.Cryptography.HashAlgorithmName] |

                Get-Member -Static -MemberType Properties |

                    Select-Object -ExpandProperty name)

    $arrSet += "RIPEMD160"

    $ValidateSetAttribute = New-Object System.Management.Automation.ValidateSetAttribute($arrSet)

 

    $AttributeCollection.Add($ValidateSetAttribute)

 

    $RuntimeParameter = New-Object System.Management.Automation.RuntimeDefinedParameter($ParameterName, [string], $AttributeCollection)

    $RuntimeParameterDictionary.Add($ParameterName, $RuntimeParameter)

    return $RuntimeParameterDictionary

}

 

end{

    if(!$PSBoundParameters.ContainsKey('hashalgorithm')){

        $hashalgorithm = "MD5"

    }

    else{

        $hashalgorithm = $PSBoundParameters.hashalgorithm

    }

    if($hashalgorithm -eq "RIPEMD160"){

        $hash = [System.Security.Cryptography.RIPEMD160Managed]::Create()

    }

    else{

        $hash = [System.Security.Cryptography.HashAlgorithm]::Create($hashalgorithm)

    }

    $utf8 = new-object -TypeName System.Text.UTF8Encoding

    $result = -join ($hash.ComputeHash($utf8.GetBytes($string)) |

        ForEach-Object {$_.ToString("x2")})

    return $result

}

}

 A különböző algoritmusok más bitszélességgel működnek:

PS C:\> ConvertTo-Hash -string kakukk -HashAlgorithm MD5

c3cf61e6cb43dd962ff56b3bb0e0c766

PS C:\> ConvertTo-Hash -string kakukk -HashAlgorithm RIPEMD160

074b6ceedf2ecbcf5ec661fb676b5e975f03fd38

PS C:\> ConvertTo-Hash -string kakukk -HashAlgorithm SHA1

4fe22e987c8aea83fa17c6dc0a3c7f6e571fa7bb

PS C:\> ConvertTo-Hash -string kakukk -HashAlgorithm SHA256

66e8a5fcb78175f055a8e8060004db813b3893f7dc7855c7b82e2833ef713082

PS C:\> ConvertTo-Hash -string kakukk -HashAlgorithm SHA384

0cb52360e3e2df32532bd5b75e219799e4f749a20d7c2a473fd39f4938738acded1dc0f93bf6da05d7342cc5e05c386d

PS C:\> ConvertTo-Hash -string kakukk -HashAlgorithm SHA512

0bd00c7c3af82b3749c3dc61da4d143780bc4a521fe2bdd07f2955622ca276889775803d2d4a9d5ada2a9bce9e6357b4bb322ec7ee5197d1cc4895f5746bcd6d

 



Word To HTML Converter