将以前存储的SecureString转换回其原始字符串时遇到问题。我这样做是因为我相信在最初输入密码时可能有一个拼写错误。
SecureString最初是使用以下代码创建并存储在文本文件中的:
$SecurePassword = Read-Host -Prompt "Enter password" -AsSecureString
$SecurePassword | ConvertFrom-SecureString > C:\TEMP\TEST_Secure.txt
字符串
对于我选择的应用程序(Veeam备份),我读取了包含加密密码的文件,并将其反馈给应用程序
$SecurePasswordPath = "C:\TEMP\TEST_Secure.txt"
$EncryptionKey = cat $SecurePasswordPath | ConvertTo-SecureString
型
Veeam备份脚本实际阅读它的方式如下:
$EncryptionKey = Add-VBREncryptionKey -Password (cat $SecurePasswordPath | ConvertTo-SecureString)
型
我已经尝试了以下方法来尝试恢复密钥:
$new1 = cat $SecurePasswordPath | ConvertTo-SecureString
$Ptr = [System.Runtime.InteropServices.Marshal]::SecureStringToCoTaskMemUnicode($new1)
$result = [System.Runtime.InteropServices.Marshal]::PtrToStringUni($Ptr)
[System.Runtime.InteropServices.Marshal]::ZeroFreeCoTaskMemUnicode($Ptr)
型
这样做的结果通常是一个空白字段。
我也试过更推荐的方法:
$new1 = cat $SecurePasswordPath | ConvertTo-SecureString
[System.Runtime.InteropServices.marshal]::PtrToStringAuto([System.Runtime.InteropServices.marshal]::SecureStringToBSTR($new1))
型
每一个结果都是什么也没有得到真正的返回。
我担心的是,我在创建时没有遵循正确的语法,将无法恢复原始密钥,从而无法恢复我的备份。
我真的很绝望!如有任何帮助,将不胜感激!!
1条答案
按热度按时间0tdrvxhp1#
以下是如何提示输入
SecureString
并将其作为加密的标准字符串写入文本文件:字符串
要反转此操作并获得
SecureString
对象,请执行以下操作:型
如果要使用AES而不是DPAPI,则还需要为
ConvertFrom-SecureString
和ConvertTo-SecureString
cmdlet提供-Key
或-SecureKey
参数。如果要将
SecureString
解密为String
对象,可以使用以下函数:型
**注意:**如果您使用此函数,您将绕过
SecureString
对象提供的保护。