powershell 将存储在文本文件中的SecureString转换回可读字符串

jjhzyzn0  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(125)

将以前存储的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))


每一个结果都是什么也没有得到真正的返回。
我担心的是,我在创建时没有遵循正确的语法,将无法恢复原始密钥,从而无法恢复我的备份。
我真的很绝望!如有任何帮助,将不胜感激!!

0tdrvxhp

0tdrvxhp1#

以下是如何提示输入SecureString并将其作为加密的标准字符串写入文本文件:

Read-Host "Enter password" -AsSecureString | 
  ConvertFrom-SecureString |
  Out-File "D:\Path\EncryptedStandardString.txt"

字符串
要反转此操作并获得SecureString对象,请执行以下操作:

$secureString = Get-Content "D:\Path\EncryptedStandardString.txt" |
  ConvertTo-SecureString


如果要使用AES而不是DPAPI,则还需要为ConvertFrom-SecureStringConvertTo-SecureString cmdlet提供-Key-SecureKey参数。
如果要将SecureString解密为String对象,可以使用以下函数:

function ConvertTo-String {
  param(
    [Security.SecureString]
    $secureString
  )
  try {
    $bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($secureString)
    [Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
  }
  finally {
    if ( $bstr -ne [IntPtr]::Zero ) {
      [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
    }
  }
}

**注意:**如果您使用此函数,您将绕过SecureString对象提供的保护。

相关问题