cmdlet
ConvertTo-SecureString
将加密的标准字符串转换为安全字符串。 它还可以将纯文本转换为安全字符串。 它与 和
Read-Host
一起使用
ConvertFrom-SecureString
。 cmdlet 创建的安全字符串可以与需要
SecureString
类型的参数的 cmdlet 或函数一起使用。 可以使用
ConvertFrom-SecureString
cmdlet 将安全字符串转换回加密的标准字符串。 这使它能够存储在文件中以供以后使用。
如果要转换的标准字符串是使用指定的密钥加密
ConvertFrom-SecureString
的,则必须提供与 cmdlet 的
Key
或
SecureKey
参数
ConvertTo-SecureString
的值相同的密钥。
请注意,对于每个
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
第一个命令使用 cmdlet 的
Read-Host
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)
第一个命令使用 cmdlet 的
Read-Host
AsSecureString
参数创建安全字符串。 输入命令后,键入的任何字符将转换为安全字符串,然后保存在 变量中
$Secure
。
第二个命令使用
ConvertFrom-SecureString
cmdlet 使用指定的密钥将
$Secure
变量中的安全字符串转换为加密的标准字符串。 内容保存在 变量中
$Encrypted
。
第三个命令使用管道运算符 (
|
) 将变量
Set-Content
的值
$Encrypted
发送到 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
指定要转换为安全字符串的纯文本字符串。 安全字符串 cmdlet 有助于保护机密文本。 为保护隐私,应对文本进行加密,并在使用后将其从计算机内存中删除。 如果你使用此参数来提供纯文本作为输入,则系统无法采用此方式保护该输入。
Type:
SwitchParameter
Position:1
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Force
从 PowerShell 7 开始,使用
AsPlainText
参数时不再需要
Force
参数。 虽然未使用 参数,但不会删除它以提供与早期版本的 PowerShell 的兼容性。
Type:
SwitchParameter
Position:2
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
指定用于将原始安全字符串转换为加密标准字符串的加密密钥。 有效密钥长度为 16、24 和 32 字节。
Type:
Byte
[
]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-SecureKey
指定用于将原始安全字符串转换为加密标准字符串的加密密钥。 必须采用安全字符串的格式提供密钥。 安全字符串将转换为要用作键的字节数组。 有效的安全密钥长度为 8、12 和 16 个码位。
Type:
SecureString
Position:1
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-String
指定要转换为安全字符串的字符串。
Type:
String
Position:0
Default value:None
Accept pipeline input:True
Accept wildcard characters:False
String
可以通过管道将标准加密字符串传递给此 cmdlet。
SecureString
此 cmdlet 返回创建的
SecureString
对象。
某些字符(如表情符号)对应于包含它们的字符串中的多个码位。 避免使用这些字符,因为它们在密码中使用时可能会导致问题和误解。
ConvertFrom-SecureString
Read-Host