У меня есть сценарий 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.
Что мы можем сделать, чтобы исправить это?
Изменить '" 'в' ' 'в этой строке:' $ Password = "Sy $ TEM @ Dmin" | ConvertTo-SecureString -AsPlainText -Force' –
Mathias - Ничего себе ... Я не могу поверить, что я пропустил это. Я был настолько сосредоточен на третьем сценарии, что даже не смотрел на двух других. Это полностью исправило мою проблему. Спасибо. –
Что также работает, чтобы избежать знака $ с backtick. http://ss64.com/ps/syntax-esc.html Похоже, что @ завершает вашу неинициализированную «переменную» $ tem, которая вычисляет пустую строку. –