加密凭据,导出,然后导入

时间:2016-03-14 13:57:51

标签: powershell password-encryption

我一直在与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   + $密码| ConvertFrom-SecureString -Key $ Key | Out-File $ PasswordFile   + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       + CategoryInfo:InvalidArgument:(System.Security.SecureString:String)[ConvertFrom-SecureString],   ParameterBindingException       + FullyQualifiedErrorId:InputObjectNotBound,Microsoft.PowerShell.Commands.ConvertFromSecureStringCommand

是否有任何加密专家可以提供帮助?我试图简单地将密码保存到文本文件(加密)然后我想使用另一个脚本使用加密密码使用新凭证调用各种程序,但我甚至无法使加密密码正常工作。提前谢谢。

1 个答案:

答案 0 :(得分:2)

简单易懂:

将凭据对象保存到磁盘:

$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)

确保这不安全,因为看到您的代码的每个人都可以重新使用该凭证,

如果您根本没有使用密钥,凭证将与您当前的用户一起加密,只有当前用户才能对其进行解密。