gpt4 book ai didi

c# - 防止密码泄露(GetNetworkCredential 方法)

转载 作者:行者123 更新时间:2023-11-30 12:38:08 24 4
gpt4 key购买 nike

我正在通过 PowerShell 运行空间在 C# 中执行我的 PowerShell 脚本。我们将凭证包装在凭证对象中。但是,当我们编写以下语句时,密码就会暴露。

$Credential = Get-Credential
$Password = $credential.GetNetworkCredential().Password

这里 $Password 将有明文密码,我想防止用户编写任何旨在从凭据对象检索密码的语句

我能想到的一种方式是,在执行脚本之前扫描脚本文本,如果发现这样的语句,我会报告。在 native PowerShell 或任何其他方式中是否有更好的方法来实现这一目标?

最佳答案

使用 Get-Credential cmdlet 捕获 PsCredential 后:

$Credential = Get-Credential

$Credential 变量有两个属性:

  1. 用户名
  2. 密码

Password属性的类型是SecureString:

$Credential.Password.GetType()  --> SecureString

所以它是加密的。现在我们可以使用这两个 cmdlet 将密码传输/保存为普通字符串,而不会泄露实际密码:

  1. ConvertFrom-SecureString
  2. ConvertTo-SecureString

假设我们在 Get-Credential 弹出窗口后向提示提供了 myuser 用户名和 mypassword 密码。

下面会将密码转换为加密的 String 对象:

$Credential.Password | ConverFrom-SecureString

#输出

 01000000d08c9ddf0115d1118c7a00c04fc297eb01000000f9ae07907bbc82458b25fd92b2dae62e0000000002000000000003660000c000000010000000e1d56e48520215b461e09a24c53375660000000004800000a0000000100000008eeb7cf1234bac1806b5b624f4dcef0a18000000c8062d946ab9605dfcaaba9a20d7a7486c54010451c2dd0714000000ce000956b190d080f2c5eae9e159a78916d88e98

您现在可以将此输出保存到一个文件中,稍后使用 Get-Content 读取它,或者将它保存到一个 PowerShell 变量中:

$EncryptedPassword = $Credential.Password | ConverFrom-SecureString

您可以使用 `ConvertTo-SecureString:

将这个普通的 String 转换回 SecureString
$Password = $EncryptedPassword | ConvertTo-SecureString

然后构造新的PsCredential对象:

$CredentialNew = New-Object System.Management.Automation.PsCredential('myuser', $Password)

希望这就是您所追求的。

关于c# - 防止密码泄露(GetNetworkCredential 方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55700896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com