2016-03-23 3 views
0

У меня есть сценарий powershell, который читает пароль из файла, пароль был «защищен» с помощью сгенерированного ключа AES. Есть три файла, используемые в процессе

AES Генерация ключа файла:

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

Генерация пароля файла:

$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 

Сценарий Это Хватает файла паролей и преобразует обратно в обычный текст:

$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 

Преобразование обратно в обычный текст действительно выполняется только для того, чтобы мы могли проверить fy, что данные такие же, как и то, что было изначально создано.

Когда мы выводим данные, содержащиеся в $ PlainPassword2 вместо того, чтобы видеть Sy $ TEM @ Dmin, как ожидается, мы видим Sy @ Dmin.

Что мы можем сделать, чтобы исправить это?

+1

Изменить '" 'в' ' 'в этой строке:' $ Password = "Sy $ TEM @ Dmin" | ConvertTo-SecureString -AsPlainText -Force' –

+0

Mathias - Ничего себе ... Я не могу поверить, что я пропустил это. Я был настолько сосредоточен на третьем сценарии, что даже не смотрел на двух других. Это полностью исправило мою проблему. Спасибо. –

+0

Что также работает, чтобы избежать знака $ с backtick. http://ss64.com/ps/syntax-esc.html Похоже, что @ завершает вашу неинициализированную «переменную» $ tem, которая вычисляет пустую строку. –

ответ

2

Вы используете двойные кавычки при преобразовании исходного пароля строки:

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

С " позволяет для интерполяции строк, синтаксический анализатор пытается расширить $tem, что, так как это, вероятно, не существует, приводит к пустую строку, таким образом, вы получите строку, которую видите на вашем выходе.

Используйте одиночные кавычки вместо:

$Password = '[email protected]' | ConvertTo-SecureString -AsPlainText -Force 
Смежные вопросы