ConvertTo-SecureString 在不同的用户帐户上运行时无需密钥,有没有办法(使用正确的凭据)让不同的用户正常工作?

2024-01-12

我有一个可以完全访问所有帐户的虚拟机。我的下面的问题都是在same机器,只是在不同的用户帐户下。

如果我登录domain\user1并运行以下 PowerShell 来生成 a 的字符串SecureString:

$SecurePassword = "ThisIsATest" | ConvertTo-SecureString -AsPlainText -Force

$RawSecureString = $SecurePassword | ConvertFrom-SecureString

Write-Host $RawSecureString

所以输出如下:

$RawSecureString = "01000000d08c9ddf0115d1118c7a00c04fc297eb0100000014c54a4678625849adf32615ece5d33f000000000200000000001066000000010000200000007ece54f23781b598d0341c2380e678bc6286222186717e612e0f095b3edc4137000000000e80000000020000200000006b68df76dbc98fcd35943be7818c80ed502ec49d0ae06deeec183367ea19e10d200000002087d6178d6a67165d41ed172e11eae6bf7d648a59d25c01dd573baaad985bb040000000adc87d779c7de9d1565bcb834e50214e982c133c3558111138a2e1964b599d1bcb7b4583ff18d314f7bc6a0549bf03342a49ba2456cc13df60585ca36125ae37"

With domain\user1我运行以下命令:

$SecureString = $RawSecureString | ConvertTo-SecureString
[System.Runtime.InteropServices.marshal]::PtrToStringAuto([System.Runtime.InteropServices.marshal]::SecureStringToBSTR($SecureString))

输出是ThisIsATest,这很好。

如果我登录为domain\user2并运行以下命令:

$RawSecureString = "01000000d08c9ddf0115d1118c7a00c04fc297eb0100000014c54a4678625849adf32615ece5d33f000000000200000000001066000000010000200000007ece54f23781b598d0341c2380e678bc6286222186717e612e0f095b3edc4137000000000e80000000020000200000006b68df76dbc98fcd35943be7818c80ed502ec49d0ae06deeec183367ea19e10d200000002087d6178d6a67165d41ed172e11eae6bf7d648a59d25c01dd573baaad985bb040000000adc87d779c7de9d1565bcb834e50214e982c133c3558111138a2e1964b599d1bcb7b4583ff18d314f7bc6a0549bf03342a49ba2456cc13df60585ca36125ae37"
$SecureString = $RawSecureString | ConvertTo-SecureString
[System.Runtime.InteropServices.marshal]::PtrToStringAuto([System.Runtime.InteropServices.marshal]::SecureStringToBSTR($SecureString))

I get Key not valid for use in specified state.,因为它是不同的用户。

由于在加密过程中没有提供密钥user1,我的问题是,如果我可以访问两个登录帐户,有没有办法user2解密这个安全字符串?

原因是我有许多虚拟机,其中密钥作为本地管理帐户存储在注册表中,而我所做的大部分操作都是来自远程域帐户。


是的,但您必须重新创建 SecureStrings。

加密后的字符串ConvertTo-SecureString只能由默认加密的同一计算机和用户帐户解密。

您可以使用以下方法解决此问题-Key范围。来自 PDQ 乐于助人的人们 https://www.pdq.com/blog/secure-password-with-powershell-encrypting-credentials-part-2/.

您可以像这样创建 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

创建新的 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

在另一台计算机或用户上创建 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)

任何获得AES.key文件将能够解密 SecureString 对象,因此请注意可以访问它!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ConvertTo-SecureString 在不同的用户帐户上运行时无需密钥,有没有办法(使用正确的凭据)让不同的用户正常工作? 的相关文章

  • 数据加密

    存储大量信用卡信息的数据库是我们刚刚完成的系统中不可避免的一部分 不过 我想要的是卡号的最终安全性 我们可以设置一种加密和解密机制 但我们自己无法解密任何给定的号码 我所追求的是一种即使在数据库级别也能保护这些信息的方法 这样任何人都无法进
  • PowerShell JSON 添加值格式

    我正在向 json 文件添加数据 我这样做是通过 blockcvalue connectionString server localdb mssqllocaldb Integrated Security true Database data
  • 如何使用多个字符的字符串在 PowerShell 中“拆分”字符串?

    当在 PowerShell 中的字符串上使用 Split 运算符并尝试使用包含多个字符的字符串进行拆分时 PowerShell 会表现出奇怪的行为 它使用any字符串中要分割的字符数 例如 PS C Users username gt On
  • 如何在 Powershell 中设置低 I/O(“后台”)优先级

    There s 这个powershell脚本 https stackoverflow com a 4302 1266650它可以将进程的优先级从 空闲 设置为 实时 但某些工具提供另一个优先级 该优先级甚至会降低进程的优先级 如何在 Pow
  • 使用 WebClient 在 PowerShell 脚本中将 FTP 从二进制更改为 ascii

    简单的 PowerShell 脚本 它可以毫无问题地下载文件 二进制 我需要它的ascii 格式 File c temp ftpfile txt ftp ftp myusername email protected cdn cgi l em
  • 具有特殊AssignableScopes的Azure自定义RM角色定义

    我正在尝试创建一个自定义 Azure RM 角色定义 其范围适用于一个订阅内的某些资源组 我不想提供对所有订阅或仅一个资源组的访问权限 并且我无法指定资源组列表 因为其中一些资源组尚未创建 我只想提供订阅资源组的某些子集的访问权限 为此 我
  • CryptoJS 使用密码加密 AES,但 PHP 解密需要密钥

    我在用CryptoJS https code google com p crypto js AES加密字符串 function doHash msg msg String msg var passphrase aggourakia var
  • 启用 TLSv1.2 和 TLS_RSA_WITH_AES_256_CBC_SHA256 密码套件

    Server TLS Version v1 2 Cipher Suite TLS RSA WITH AES 256 CBC SHA256 Client JRE 1 7 当我尝试直接通过 SSL 从客户端连接到服务器时 收到以下错误 Caus
  • Powershell强类型环境变量

    我想设置一个强类型环境变量 当我使用 env 时它似乎 丢失 了它的类型 在原始函数中它工作正常 function Create ThisCrap Microsoft ApplicationInsights TelemetryClient
  • PowerShell Get-ChildItem 如何捕获异常

    我目前正在编写一个可视化错误 GUI 它可以在处理时捕获任何异常 并向用户提供 易于理解 的错误消息 但似乎我在使用时无法捕获任何异常Get ChildItemcmdlet 我是否必须使用与 try catch 不同的方法 这是 Power
  • 使用 C# 执行 Powershell commandlet 时出错

    我有以下经过测试且有效的代码 using new Impersonator Administrator dev dev RunspaceConfiguration runspaceConfiguration RunspaceConfigur
  • 使用powershell计算子文件夹中具有特定名称的文件数量

    因此 我开始解决一个问题 我需要知道某个名称的子文件夹中有多少个文件 这些文件在整个目录中重复多次 我想要计算的所有文件夹都具有相同的名称 例如 Main Folder Subfolder Folder I want to count Fo
  • 如何在 Qt simple 上解密/加密某些字符串(例如密码)

    这是我得到的 Qt SDK版本4 6 2 视窗XP 问题 我怎样才能简单地加密和简单地加密QString价值 我需要它能够将一些加密的字符串保存到 INI 文件中 并在重新打开应用程序后将字符串加密为正常的密码字符串值 PS 我正在寻找简单
  • 在 powershell 3 中美化 json

    给定一个标准 json 字符串值 jsonString baz quuz cow moo cud foo bar 我怎样才能让这一切都漂亮的换行符 最好没有强力正则表达式 到目前为止我发现的最简单的方法是 jsonString Conver
  • Powershell,从txt文件读取并格式化数据(删除行,删除之间的空格)

    我对 powershell 真的很陌生 我想使用powershell读取txt文件并将其更改为其他格式 从 txt 文件中读取 设置数据格式 删除行 删除之间的空格 记录计数 T 000000002 9 个字符 然后将输出写入新文件 我两天
  • PHP MCRYPT 加密/解密返回不可见的奇怪字符?

    mcrypt decrypt给了我额外的不可见字符 这些字符通过在页面上回显是不可见的 只能通过将其写入文本文件来查看 也就是说 只显示在页面上就可以了 而且很难被注意到 这是谷歌搜索的代码示例 请指导我正确的用法是什么 有什么问题吗 fu
  • Laravel - LIKE 运算符来搜索加密值

    我正在尝试在 Laravel 应用程序中实现一个搜索模块 可以按名称过滤用户 为了保护用户 name 列行在数据库上加密 我面临的问题是下面的查询总是返回 0 结果 我在搜索数据库之前对搜索输入值进行加密 patients DB selec
  • PowerShell:如何在名称为“*”(星号/星号)的文件/文件夹上创建选择器?

    我需要从 PS 修改注册表 此注册表项与特定文件 所有扩展的文件夹 的上下文菜单相关 HKEY CURRENT USER Software Classes 目前我想将项目添加到此路径 HKCU Software classes shell
  • Java简单加密

    我想加密存储在磁盘上的文本 配置 文件 尝试使用DES http en wikipedia org wiki Data Encryption Standard加密 我在客户端计算机上遇到了致命错误 后来我发现该算法无法处理重音字符 我怀疑这
  • 穷人序列号生成方案

    我想得到一些简单的方案 算法 用于根据一些唯一的硬件ID CPU ID或以太网MAC地址或硬盘序列号 生成序列号 我希望方案仅在一个方向上工作 因此客户端计算机上的应用程序可以验证序列号但不能生成序列号 所以破解起来并不简单 现在很可能大多

随机推荐