PowerShell 技能连载 - 用口令对文本信息加密

适用于 PowerShell 3.0 及以上版本

在前一个技能中,我们介绍了如何使用 Windows 注册表中的 Windows 产品序列号来加密文本信息。

如果您觉得这种方式不够安全,那么可以使用自己指定的密钥来加密。以下例子演示了如何使用密码作为加密密钥:

$Path = "$env:temp\secret.txt"
$Secret = 'Hello World!'
$Passphrase = 'Some secret key'

$key = [Byte[]]($Passphrase.PadRight(24).Substring(0,24).ToCharArray())

$Secret |
  ConvertTo-SecureString -AsPlainText -Force |
  ConvertFrom-SecureString -Key $key |
  Out-File -FilePath $Path

notepad $Path

要解密一段密文,您需要知道对应的密码:

$Passphrase = Read-Host 'Enter the secret pass phrase'

$Path = "$env:temp\secret.txt"

$key = [Byte[]]($Passphrase.PadRight(24).Substring(0,24).ToCharArray())

try
{
  $decryptedTextSecureString = Get-Content -Path $Path -Raw |
  ConvertTo-SecureString -Key $key -ErrorAction Stop

  $cred = New-Object -TypeName System.Management.Automation.PSCredential('dummy', $decryptedTextSecureString)
  $decryptedText = $cred.GetNetworkCredential().Password
}
catch
{
  $decryptedText = '(wrong key)'
}
"The decrypted secret text: $decryptedText"

PowerShell 技能连载 - 用口令对文本信息加密

http://blog.vichamp.com/2015/04/07/encrypting-text-information-using-passphrase/

作者

吴波

发布于

2015-04-07

更新于

2022-07-06

许可协议

评论