了解 Powershell SecureStrings

Understanding Powershell SecureStrings

今天想深入了解SecureString .NET和Powershell的概念,没想到,我理解的很好。

如果我有密码并将其转换为安全字符串。它是在我输入时保存的吗? (加密或纯文本)。

现在,如果我将密码作为 PSCredential 的一部分传递给 PSSession:会发生什么情况? PSSession 运行 ConvertFrom-SecureString 是否在传递的密码上?但是随后密码又被加密了。它如何知道如何将其传递给 PSSesion?

我不完全理解你的问题,但明白了。如果您根据 对象类型 (some explanation) 考虑,这可能会更容易。 [这个 link 现在已经死了。]

"If I have a password and convert it to a securestring. Is it saved as I entered it? (Being both encrypted or plain text)"

  • 您的密码将为纯文本,类型为 [String]。这未加密。
  • SecureString 的类型为 [System.Security.SecureString]。它是加密的。
  • 此加密发生 in memory whenever you create the SecureString
  • 请务必注意,需要密钥才能解密 SecureString(更多内容见下文)

方法一
这会创建一个名为 $SecurePasswordencrypted SecureString 变量。未加密的密码没有保存在内存中。

$SecurePassword = Read-Host -Prompt "Enter password" -AsSecureString

方法二
这将创建一个 未加密的 String 变量 $PlainPassword 然后 一个 SecureString 变量。

$PlainPassword = Read-Host -Prompt "Enter password"
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force

"Now if I would pass the password as a part of a PSCredential to a PSSession: what would happen?"

  • PSSession 不接受未加密的密码。为了简化,您可以提供 User 并提示输入密码,或者传递类型为 PSCredential 的对象 - 即它需要 安全密码 .
  • 当您传递 PSCredential 时,它已经使用 SecureString 的密码进行了加密。
  • 但是 PSSession 需要对其进行解密(这部分我不确定但假设...它还能如何修改它?)
  • 要解密 SecureString,需要密钥。密钥是正常生成的,只要两台机器的密钥相同security principle,PSSession就可以完成解密(这部分我确定)
  • This post解决了在不同原理的情况下,如何创建密钥才能解密SecureString