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!