Зашифровать учетные данные, экспортировать, затем импортировать

Я уже довольно давно работаю с Powershell, но не понимаю, как работает шифрование, даже не уверен, что использую правильный синтаксис при чтении файлов справки.

#Get User Information
$User = Read-Host "Please enter your username"
$Password = Read-Host "Please enter your password. This will be encrypted" -AsSecureString | ConvertTo-SecureString -AsPlainText -Force

#Define a Key File
$KeyFile = "C:\Powershell\AES.key"
$Key = New-Object Byte[] 32
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key)
$Key | out-file $KeyFile

#Encrypt using AES
$PasswordFile = "C:\Powershell\Password.txt"
$KeyFile = "C:\Powershell\AES.key"
$Key = Get-Content $KeyFile
$Password | ConvertFrom-SecureString | Out-File $PasswordFile

#Set credentials to be called.
$myCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, (Get-Content $PasswordFile | ConvertTo-SecureString -Key $key)

#Open text file.
Invoke-Command -ComputerName localhost -Credential $MyCredentials -ScriptBlock{
    Invoke-Item C:\Powershell\Password.txt
    }

Я получил сообщение об ошибке при запуске, и я не уверен, почему я не могу передать это:

ConvertFrom-SecureString: входной объект не может быть привязан к каким-либо параметрам для команды либо потому, что команда не принимает входные данные конвейера, либо входные данные и его свойства не соответствуют ни одному из параметров, принимающих входные данные конвейера. В C: \ Powershell \ Password.ps1: 15 символов: 13 + $ Password | ConvertFrom-SecureString -Key $ Key | Out-File $ PasswordFile + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidArgument: ( System.Security.SecureString: String) [ConvertFrom-SecureString], ParameterBindingException + FullyQualifiedErrorId: InputObjectNotBound, Microsoft.PowerShell.Commands.ConvertFromSecureStringCommand

Могут ли помочь специалисты по шифрованию? Я пытаюсь просто сохранить пароль в текстовом файле (зашифрованном), а затем я хочу использовать другой сценарий для вызова различных программ с использованием новых учетных данных с использованием зашифрованного пароля, но я даже не могу заставить зашифрованный пароль работать правильно. Заранее спасибо.


person noz3r0    schedule 14.03.2016    source источник


Ответы (1)


Чтобы упростить:

Чтобы сохранить объект учетных данных на диск:

$credential = Get-Credential
$Key = [byte]1..32
$credential.Password | ConvertFrom-SecureString -Key $Key | Set-Content c:\cred.key

Чтобы загрузить его обратно в Powershell:

$Key = [byte]1..32
$username = "type the username here"
$encrypted = Get-Content c:\cred.key | ConvertTo-SecureString -Key $Key

## Create The Credential Object:

$credential = New-Object System.Management.Automation.PsCredential($username, $encrypted)

Конечно, это не защищено, потому что каждый, кто видит ваш код, может повторно использовать учетные данные,

Если вы вообще не используете ключ, учетные данные будут зашифрованы вашим текущим пользователем, и только текущий пользователь сможет расшифровать их обратно.

person Avshalom    schedule 14.03.2016
comment
Кажется, это работает нормально. Я пытаюсь передать эти учетные данные в Invoke-Command, и каждый раз, когда я запускаю это для вызова текстового файла, я ничего не получаю. Возможно, я делаю это неправильно. Nvm, я невероятно тупой и слишком много раздумываю, сегодня понедельник. Спасибо! - person noz3r0; 14.03.2016