连接安全字符串

Concatenating secure string

是否可以在 PowerShell 中将安全字符串与变量和不安全字符串连接起来?

我有一个用于我们的独立环境(无域)中的本地管理员密码的公式。我想将该公式的一部分安全地存储在一个文件中,然后获取它,将其转换为常规字符串,并将其与另一个对象和另一个字符串连接以形成密码。

我的目的不是在我组合的工作流程中以纯文本形式公开我们的公式。还有另一种我想念的方式吗?机器太多了,不容易单独存储每个密码。

Credential 对象允许您解密安全字符串 (source):

PS C:\> <b>$pw = 'bar' | ConvertTo-SecureString -AsPlainText -Force</b>
PS C:\> <b>$pw.GetType().FullName</b>
System.Security.SecureString
PS C:\> <b>$cred = New-Object Management.Automation.PSCredential 'foo', $pw</b>
PS C:\> <b>$cred.GetType().FullName</b>
System.Management.Automation.PSCredential
PS C:\> <b>$cred.UserName</b>
foo
PS C:\> <b>$cred.Password</b>
System.Security.SecureString
PS C:\> <b>$cred.GetNetworkCredential().Password</b>
bar

但是,安全字符串的加密密钥与创建安全字符串的用户和计算机相关联,因此它不能在另一台计算机上使用,也不能被其他用户使用。您可以解决此问题,但这需要使用您生成的密钥来加密安全字符串,并且只要需要解密安全​​字符串,该密钥就必须以纯文本(或更确切地说是纯字节)的形式提供。这有点违背了加密它的初衷。

最重要的是,如果您有足够多的机器可以让存储单独的密码变得麻烦,那么您也有足够多的机器可以认真考虑将它们放入域中。