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-SecureString
和 Read-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 |
输入
可以通过管道将标准加密字符串传递给此 cmdlet。
输出
此 cmdlet 返回创建的 SecureString 对象。
备注
某些字符(如表情符号)对应于包含它们的字符串中的多个代码点。 避免使用这些字符,因为它们可能会导致密码中使用时出现问题和误解。