Show-EncryptionSymmetric

Ich möchte zeigen, wie man recht einfach einen Text symmetrisch ver- und wieder entschlüsseln kann. Bei einer symmetrischen Verschlüsselung wird für beide Aktionen der gleiche Schlüssel verwendet.

Step 1: Wir brauchen einen Key. Dieser muss im Byte-Format vorliegen. die Konvertierung übernimmt eine Funktion.

function Set-Key {
    param([string]$string)

    $length = $string.length
    $pad = 32-$length
    if (($length -lt 6) -or ($length -gt 32)) {Throw "Key muss zwischen 16 und 32 Zeichen lang sein!"}
    $encoding = New-Object System.Text.ASCIIEncoding
    $bytes = $encoding.GetBytes($string + "0" * $pad)
    return $bytes
}

Step 2: Eine weitere Funktion soll einen Text und den Key aufnehmen und dafür einen verschlüsselten Text zurückgeben:

function Set-EncryptedData {
    param($key,[string]$plainText)

    $securestring = new-object System.Security.SecureString
    $chars = $plainText.toCharArray()
    foreach ($char in $chars) {$secureString.AppendChar($char)}
    $encryptedData = ConvertFrom-SecureString -SecureString $secureString -Key $key
    return $encryptedData
}

Step 3: Die dritte Funktion nimmt einen kompatiblen, verschlüsselten Text und den Key auf und gibt den entschlüsselten Text zurück:

function Get-EncryptedData {
    param($key,$data)

    $ErrorActionPreference = 'silentlycontinue'
    $data | ConvertTo-SecureString -key $key |
    ForEach-Object {[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($_))}

    $ErrorActionPreference = 'continue'
}

Und so könnte die Anwendung der Funktionen aussehen:

$PlainText     = "Geheimer Text"
$key           = Set-Key -string (Read-Host -Prompt 'Passwort')
$EncryptedText = Set-EncryptedData -key $key -plainText $plaintext
$EncryptedText

$DecryptedText = Get-EncryptedData -data $EncryptedText -key $key 
$DecryptedText

Hier gibt es die komplette Datei als ps1 zum Download: Show-EncryptionSymmetric

Stay tuned!

Kommentar hinterlassen