2016-03-23 4 views
0

Ich habe ein Powershell-Skript, das ein Passwort aus einer Datei liest, das Passwort wurde "gesichert" mit einem generierten AES-Schlüssel. Es gibt drei Dateien in dem Verfahren verwendet

AES Key File Generation:

$KeyFile = "\\server\path\AES.key" 
$Key = New-Object Byte[] 16 
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key) 
$Key | out-file $KeyFile 

Passwort File Generation:

$PasswordFile = "\\server\path\Password.txt" 
$KeyFile = "\\server\path\AES.key" 
$Key = Get-Content $KeyFile 
$Password = "[email protected]" | ConvertTo-SecureString -AsPlainText -Force 
$Password | ConvertFrom-SecureString -key $Key | Out-File $PasswordFile 

Script Das Passwortdatei Grabs und Wandelt zurück in Plain Text:

$User = "myuser" 
$PasswordFile = "\\server\path\Password.txt" 
$KeyFile = "\\server\path\AES.key" 
$key = Get-Content $KeyFile 
$MyCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, (Get-Content $PasswordFile | ConvertTo-SecureString -Key $key) 
$PlainPassword2 = $MyCredential.GetNetworkCredential().Password 
$PlainPassword2 

Die Konvertierung zurück in den Klartext wird wirklich getan, nur so können wir veri fy, dass die Daten identisch mit denen sind, die ursprünglich erstellt wurden.

Wenn wir die Daten enthalten in $ PlainPassword2 anstelle des Sehens Sy $ Tem @ dmin anzuzeigen, wie zu erwarten ist, werden wir Sy @ dmin sehen.

Was können wir tun, um dies zu korrigieren?

+1

ändern '" 'auf' ' 'in dieser Zeile:' $ Password = "Sy $ Tem @ dmin" | ConvertTo-Secure -AsPlainText -Force' –

+0

Mathias - Wow ... Ich kann nicht glauben, dass ich das verpasst habe. Ich war so konzentriert auf das dritte Skript, dass ich die beiden nie gesehen habe. Das hat mein Problem komplett korrigiert. Danke. –

+0

Was auch funktioniert, ist das $ -Zeichen zu entkommen mit einem Backtick http://ss64.com/ps/syntax-esc.html Es sieht so aus, als ob das @ Ihre nicht initialisierte "variable" $ tem beendet, die zu einem leeren String führt. –

Antwort

2

Sie verwenden doppelte Anführungszeichen, wenn das Original-Passwort Zeichenfolge konvertieren:

$Password = "[email protected]" | ConvertTo-SecureString -AsPlainText -Force 

Da " für String-Interpolation ermöglicht, versucht der Parser $tem zu erweitern, die, da sie wahrscheinlich nicht Ergebnisse in einem nicht existieren leere Zeichenfolge, damit Sie mit der Zeichenfolge enden, die Sie in Ihrer Ausgabe sehen.

Verwenden Apostrophe statt:

$Password = '[email protected]' | ConvertTo-SecureString -AsPlainText -Force 
Verwandte Themen