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!