c# - 使用 C# 从 Powershell 中解密 SecureString

标签 c# powershell encryption

我有以下 Powershell 代码来加密我的密码

$my_secure_password = convertto-securestring "myPW"-asplaintext -force $my_encrypted_string = convertfrom-securestring $my_secure_password - key (1..16)

输出是这样的 76492d1116743f0423413b16050a5345MgB8AHMASgB1AFMARwBxAFMAYgA1AFIAYwAyAE4AOABqAHMAOQBaADgAbwBGAEEAPQA9AHwANwBk......

如何在 C# 中解密此输出以便在 C# 中将其用作 SecureString?

我已经测试过类似的东西,但这对我不起作用

var runSpace_new = RunspaceFactory.CreateRunspace();
runSpace_new.Open();

PowerShell PSinstance = PowerShell.Create();
PSinstance.AddScript("$decrypt = convertto-securestring -key (1..16) -string 76492d1116743f0423413b.......");
var psOutput_new = PSinstance.Invoke();
var a = runSpace_new.SessionStateProxy.PSVariable.GetValue("decrypt");

但是a是空的....

更新 我已经找到了解决方案:

SecureString new_sec_pass = new SecureString();
PowerShell instance = PowerShell.Create();

instance.AddScript("convertto-securestring -key (1..16) -string 76492d1...");

foreach (PSObject psOutput in instance.Invoke())
{
    new_sec_pass = psOutput.BaseObject as SecureString;
}

PSCredential new_credentials = new PSCredential(Username, new_sec_pass);

最佳答案

你可以试试这个(也许它对你有帮助 - 对我来说 - 它很有效):

using System.Collections.ObjectModel;
using System.Management.Automation;

     static void Main(string[] args)
        {

            var variable = PowerShell.Create().AddScript("$xtr = convertto-securestring -key (1..16) -string" + 
            " '76492d1116743f0423413b16050a5345MgB8AEQAbQBIAEIASQB6ADcAeQA0AH" + 
            "UAaAB6AFEAawBJAEYAVAA0AHcAUwBoAGcAPQA9AHwAMQAzAGUANwBmADIAOAAxADEANwAwAGUAZQBjADMANwBlAG" +
            "QAYQAxADcAZABlADEAMQBhAGYAZgBiADkAOQBiADIAMAAwAGMAMgA1AGEAZgAxADcAMABhADAAYwBjAGIAMQBhADAAZAAwADMAMwAzADMAOQAwADcAYQAzAGMANwA='" + 
            ";$PwdPointer = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($xtr);"+
            "$PlainTextPassword = [Runtime.InteropServices.Marshal]::PtrToStringAuto($PwdPointer);$PlainTextPassword").AddCommand("out-string");
        Collection<PSObject> results = variable.Invoke();

            foreach (var str in results)
            {

                Console.WriteLine(str);
                Console.ReadKey();

            }
        }

关于c# - 使用 C# 从 Powershell 中解密 SecureString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45670002/

相关文章:

command-line - 自定义 powershell 提示正在清除 $lastexitcode

Contiki 中的 CCM* 测试

c# - 声明比角色更好吗

c# - How to split worksheets into separate workbooks using c#//如何使用EPPLus复制整个工作表

c# - 将 Powershell 脚本添加到 C# 项目

powershell - 在json文件数组上使用test-json

Python:双向字母数字加密

android - 连接到开放式 WiFi

c# - 在集合上使用 Distinct() 时的消除顺序

c# - Duck Typing DynamicObject 派生