了解 Powershell SecureStrings

mh1*_*133 1 powershell session securestring

今天想深入研究一下SecureString .NET 和Powershell 的概念,但没想到,我理解的很好。

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

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

gms*_*man 5

我不完全理解你的问题,但明白了。如果您考虑对象类型一些解释),这可能会更容易。[此链接现已失效。]

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

  • 您的密码将是纯文本,类型为[String]。这不是加密的。
  • SecureString 的类型为[System.Security.SecureString]。它是加密的。
  • 这种加密发生在内存中,只要您创建的SecureString
  • 重要的是要注意解密需要一个密钥SecureString(更多内容见下文)

方法 1
这将创建一个名为的加密 SecureString变量$SecurePassword。未加密的密码不会进入内存。

$SecurePassword = Read-Host -Prompt "Enter password" -AsSecureString
Run Code Online (Sandbox Code Playgroud)

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

$PlainPassword = Read-Host -Prompt "Enter password"
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force
Run Code Online (Sandbox Code Playgroud)

“现在,如果我将密码作为 PSCredential 的一部分传递给 PSSession:会发生什么?”

  • PSSession 不接受未加密的密码。为简化起见,您可以提供 aUser并提示输入密码,或者传递具有该类型的对象PSCredential- 即它需要一个安全密码
  • 当您通过 a 时PSCredential,它已经用密码加密为 a SecureString
  • 但是 PSSession 需要解密它(这部分我不确定但假设......它还能如何改变它?)
  • 要解密SecureString,需要密钥。密钥正常生成,只要两台机器的安全原理相同,PSSession就可以完成解密(这部分我确定)
  • 这篇文章讨论了如何创建一个密钥,以便SecureString在存在不同原则时可以解密a 。