Ale*_*tny 2 encryption powershell
我有一个可以访问所有帐户的虚拟机。我下面的问题都是在同一个问题上运行的台机器,只是在不同的用户帐户下。
如果我登录domain\user1并运行以下 PowerShell 以生成一个字符串SecureString:
$SecurePassword = "ThisIsATest" | ConvertTo-SecureString -AsPlainText -Force
$RawSecureString = $SecurePassword | ConvertFrom-SecureString
Write-Host $RawSecureString
Run Code Online (Sandbox Code Playgroud)
所以输出如下:
$RawSecureString = "01000000d08c9ddf0115d1118c7a00c04fc297eb0100000014c54a4678625849adf32615ece5d33f000000000200000000001066000000010000200000007ece54f23781b598d0341c2380e678bc6286222186717e612e0f095b3edc4137000000000e80000000020000200000006b68df76dbc98fcd35943be7818c80ed502ec49d0ae06deeec183367ea19e10d200000002087d6178d6a67165d41ed172e11eae6bf7d648a59d25c01dd573baaad985bb040000000adc87d779c7de9d1565bcb834e50214e982c133c3558111138a2e1964b599d1bcb7b4583ff18d314f7bc6a0549bf03342a49ba2456cc13df60585ca36125ae37"
随着domain\user1我运行以下命令:
$SecureString = $RawSecureString | ConvertTo-SecureString
[System.Runtime.InteropServices.marshal]::PtrToStringAuto([System.Runtime.InteropServices.marshal]::SecureStringToBSTR($SecureString))
Run Code Online (Sandbox Code Playgroud)
输出是 ThisIsATest,这很好。
如果我登录domain\user2并运行以下命令:
$RawSecureString = "01000000d08c9ddf0115d1118c7a00c04fc297eb0100000014c54a4678625849adf32615ece5d33f000000000200000000001066000000010000200000007ece54f23781b598d0341c2380e678bc6286222186717e612e0f095b3edc4137000000000e80000000020000200000006b68df76dbc98fcd35943be7818c80ed502ec49d0ae06deeec183367ea19e10d200000002087d6178d6a67165d41ed172e11eae6bf7d648a59d25c01dd573baaad985bb040000000adc87d779c7de9d1565bcb834e50214e982c133c3558111138a2e1964b599d1bcb7b4583ff18d314f7bc6a0549bf03342a49ba2456cc13df60585ca36125ae37"
$SecureString = $RawSecureString | ConvertTo-SecureString
[System.Runtime.InteropServices.marshal]::PtrToStringAuto([System.Runtime.InteropServices.marshal]::SecureStringToBSTR($SecureString))
Run Code Online (Sandbox Code Playgroud)
我得到 Key not valid for use in specified state.,因为它是不同的用户。
由于在加密期间没有提供密钥user1,我的问题是,如果我有权访问两个登录帐户,是否有办法user2解密此安全字符串?
原因是我有许多虚拟机,其中的密钥作为本地管理帐户存储在注册表中,而我所做的大部分工作来自远程域帐户。
是的,但您必须重新创建 SecureStrings。
加密的字符串 ConvertTo-SecureString只能由默认加密它们的同一台计算机和用户帐户解密。
您可以使用-Key参数来解决此问题。来自 PDQ 的乐于助人的人。
您可以像这样创建一个 AES 密钥:
$KeyFile = "C:\AES.key"
$Key = New-Object Byte[] 16 # You can use 16 (128-bit), 24 (192-bit), or 32 (256-bit) for AES
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($Key)
$Key | Out-File $KeyFile
Run Code Online (Sandbox Code Playgroud)
创建新的 SecureString 对象:
$PasswordFile = "C:\Password.txt"
$KeyFile = "C:\AES.key"
$Key = Get-Content $KeyFile
$Password = "P@ssword1" | ConvertTo-SecureString -AsPlainText -Force
$Password | ConvertFrom-SecureString -key $Key | Out-File $PasswordFile
Run Code Online (Sandbox Code Playgroud)
在另一台计算机或用户上创建 PSCredential 对象:
$User = "MyUserName"
$PasswordFile = "C:\Password.txt"
$KeyFile = "C:\AES.key"
$key = Get-Content $KeyFile
$MyCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, (Get-Content $PasswordFile | ConvertTo-SecureString -Key $key)
Run Code Online (Sandbox Code Playgroud)
任何获得该AES.key文件的人都可以解密 SecureString 对象,因此请注意可以访问它!
| 归档时间: |
|
| 查看次数: |
3711 次 |
| 最近记录: |