ConvertTo-SecureString

将纯文本或加密字符串转换为安全字符串。

语法

ConvertTo-SecureString
              [-String] <String>
              [[-SecureKey] <SecureString>]
              [<CommonParameters>]
ConvertTo-SecureString
              [-String] <String>
              [-AsPlainText]
              [-Force]
              [<CommonParameters>]
ConvertTo-SecureString
              [-String] <String>
              [-Key <Byte[]>]
              [<CommonParameters>]

说明

ConvertTo-SecureString cmdlet 将加密的标准字符串转换为安全字符串。 它还可以将纯文本转换为安全字符串。 它与 ConvertFrom-SecureStringRead-Host一起使用。 cmdlet 创建的安全字符串可与需要类型为 SecureString的参数的 cmdlet 或函数一起使用。 可以使用 ConvertFrom-SecureString cmdlet 将安全字符串转换回加密的标准字符串。 这样,就可以将其存储在文件中供以后使用。

如果使用指定密钥通过 ConvertFrom-SecureString 加密转换的标准字符串,则必须提供与 cmdlet 的 密钥ConvertTo-SecureString 参数的值相同的密钥。

注意

有关 SecureString 数据保护的详细信息,请参阅 SecureString 的安全性如何?

示例

示例 1:将安全字符串转换为加密字符串

此示例演示如何从用户输入创建安全字符串,将安全字符串转换为加密的标准字符串,然后将加密的标准字符串转换回安全字符串。

PS C:\> $Secure = Read-Host -AsSecureString
PS C:\> $Secure
System.Security.SecureString
PS C:\> $Encrypted = ConvertFrom-SecureString -SecureString $Secure
PS C:\> $Encrypted
01000000d08c9ddf0115d1118c7a00c04fc297eb010000001a114d45b8dd3f4aa11ad7c0abdae98000000000
02000000000003660000a8000000100000005df63cea84bfb7d70bd6842e7efa79820000000004800000a000
000010000000f10cd0f4a99a8d5814d94e0687d7430b100000008bf11f1960158405b2779613e9352c6d1400
0000e6b7bf46a9d485ff211b9b2a2df3bd6eb67aae41
PS C:\> $Secure2 = ConvertTo-SecureString -String $Encrypted
PS C:\> $Secure2
System.Security.SecureString

第一个命令使用 cmdlet 的 Read-Host 参数来创建安全字符串。 输入命令后,键入的任何字符将转换为安全字符串,然后保存在 $Secure 变量中。

第二个命令显示 $Secure 变量的内容。 由于 $Secure 变量包含安全字符串,因此 PowerShell 仅显示 System.Security.SecureString 类型。

第三个命令使用 ConvertFrom-SecureString cmdlet 将 $Secure 变量中的安全字符串转换为加密的标准字符串。 它将结果保存在 $Encrypted 变量中。

第四个命令在 $Encrypted 变量的值中显示加密字符串。

第五个命令使用 ConvertTo-SecureString cmdlet 将 $Encrypted 变量中的加密标准字符串转换回安全字符串。 它将结果保存在 $Secure2 变量中。 第六个命令显示 $Secure2 变量的值。 SecureString 类型指示命令成功。

示例 2:从文件中的加密字符串创建安全字符串

此示例演示如何从保存在文件中的加密标准字符串创建安全字符串。

$Secure = Read-Host -AsSecureString
$Encrypted = ConvertFrom-SecureString -SecureString $Secure -Key (1..16)
$Encrypted | Set-Content Encrypted.txt
$Secure2 = Get-Content Encrypted.txt | ConvertTo-SecureString -Key (1..16)

第一个命令使用 cmdlet 的 Read-Host 参数来创建安全字符串。 输入命令后,键入的任何字符将转换为安全字符串,然后保存在 $Secure 变量中。

第二个命令使用 ConvertFrom-SecureString cmdlet 通过指定的密钥将 $Secure 变量中的安全字符串转换为加密的标准字符串。 内容保存在 $Encrypted 变量中。

第三个命令使用管道运算符(|)将 $Encrypted 变量的值发送到 Set-Content cmdlet,该 cmdlet 将该值保存在 Encrypted.txt 文件中。

第四个命令使用 Get-Content cmdlet 获取 Encrypted.txt 文件中的加密标准字符串。 该命令使用管道运算符将加密字符串发送到 ConvertTo-SecureString cmdlet,该 cmdlet 使用指定的密钥将其转换为安全字符串。 结果保存在 $Secure2 变量中。

示例 3:将纯文本字符串转换为安全字符串

此命令将纯文本字符串 P@ssW0rD! 转换为安全字符串,并将结果存储在 $Secure_String_Pwd 变量中。

从 PowerShell 7 开始,使用 AsPlainText 参数时,不需要 Force 参数。 但是,包括 Force 参数可确保该语句与早期版本兼容。

$Secure_String_Pwd = ConvertTo-SecureString "P@ssW0rD!" -AsPlainText -Force

谨慎

应避免在脚本或命令行中使用纯文本字符串。 纯文本可以显示在事件日志和命令历史记录日志中。

参数

-AsPlainText

指定要转换为安全字符串的纯文本字符串。 安全字符串命令单元有助于保护机密文本。 文本已加密以用于隐私,并在使用后从计算机内存中删除。 如果使用此参数提供纯文本作为输入,则系统无法以这种方式保护该输入。

类型:SwitchParameter
Position:1
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Force

从 PowerShell 7 开始,使用 AsPlainText 参数时,不再需要 Force 参数。 虽然未使用此参数,但未删除它以提供与早期版本的 PowerShell 的兼容性。

类型:SwitchParameter
Position:2
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Key

指定用于将原始安全字符串转换为加密标准字符串的加密密钥。 有效的密钥长度为 16、24 和 32 字节。

类型:Byte[]
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-SecureKey

指定用于将原始安全字符串转换为加密标准字符串的加密密钥。 必须以安全字符串的格式提供密钥。 安全字符串将转换为要用作键的字节数组。 有效的安全密钥长度为 8、12 和 16 个码位。

类型:SecureString
Position:1
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-String

指定要转换为安全字符串的字符串。

类型:String
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:False

输入

String

可以通过管道将标准加密字符串传递给此 cmdlet。

输出

SecureString

此 cmdlet 返回创建的 SecureString 对象。

备注

某些字符(如表情符号)对应于包含它们的字符串中的多个代码点。 避免使用这些字符,因为它们可能会导致密码中使用时出现问题和误解。