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!
