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 对被转换的标准字符串进行了加密,则必须提供与 ConvertTo-SecureString cmdlet 的 KeySecureKey 参数的值相同的密钥。

注意

请注意,根据 DotNet,SecureString 的内容不会在非 Windows 系统上加密。

示例

示例 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

第一个命令使用 Read-Host cmdlet 的 AsSecureString 参数创建安全字符串。 输入该命令后,你键入的任何字符都将转换为安全字符串,并且随后保存到 $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)

第一个命令使用 Read-Host cmdlet 的 AsSecureString 参数创建安全字符串。 输入该命令后,你键入的任何字符都将转换为安全字符串,并且随后保存到 $Secure 变量中。

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

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

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

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

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

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

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

注意

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

参数

-AsPlainText

指定要转换为安全字符串的纯文本字符串。 安全字符串 cmdlet 有助于保护机密文本。 为保护隐私,应对文本进行加密,并在使用后将其从计算机内存中删除。 如果你使用此参数来提供纯文本作为输入,则系统无法采用此方式保护该输入。

Type:SwitchParameter
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Force

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

Type:SwitchParameter
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Key

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

Type:Byte[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SecureKey

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

Type:SecureString
Position:1
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-String

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

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

输入

String

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

输出

SecureString

此 cmdlet 返回创建的 SecureString 对象。

备注

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