Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C从Powershell解密SecureString#_C#_Powershell_Encryption - Fatal编程技术网

C# 使用C从Powershell解密SecureString#

C# 使用C从Powershell解密SecureString#,c#,powershell,encryption,C#,Powershell,Encryption,我有以下Powershell代码来加密我的密码 $my\u secure\u password=convertto securestring“myPW”-asplaintext-force $my_encrypted_string=转换自securestring$my_secure_password-密钥(1..16) 输出是这样的 76492D1116743F0423413B16050A5345MGB8AHMASGB1AFMARWBXAFMAYGA1AFIAAYWAYAE4AOABQAHMA

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

$my\u secure\u password=convertto securestring“myPW”-asplaintext-force
$my_encrypted_string=转换自securestring$my_secure_password-密钥(1..16)

输出是这样的 76492D1116743F0423413B16050A5345MGB8AHMASGB1AFMARWBXAFMAYGA1AFIAAYWAYAE4AOABQAHMAOQBAADGABWBGAEEAPQA9AHWANWBK

如何在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);
你可以试试这个(也许对你有帮助-对我来说-这是工作):

使用System.Collections.ObjectModel;
使用系统、管理、自动化;
静态void Main(字符串[]参数)
{
var variable=PowerShell.Create().AddScript($xtr=converttosecurestring-key(1..16)-string“+
“'76492D1116743F0423413B16050A5345MGB8AEQABQBIAEQB6ADCAEQA0AH”+
“UAAAB6AFEAAWBJAEYAVAA0AHCAUWBOAGCAPQA9AHAWAMQAZAUAUWBMADIAOAAXADEANWAWAGUAZQBJADMANWBLAG”+
“Qayqaxadcazabladeamqbagyazgbiadkaoqbiadiamawagmaga1ageazgaxadcamabhadaybjagiamqbadaazaawadmamwazadmaoqawadcayqazagmanwa=”+
“;$PwdPointer=[Runtime.InteropServices.Marshal]::SecureStringToBSTR($xtr);”+
“$PlainTextPassword=[Runtime.InteropServices.Marshal]::PtrToStringAuto($PwdPointer);$PlainTextPassword”).AddCommand(“输出字符串”);
集合结果=variable.Invoke();
foreach(结果中的var str)
{
控制台写入线(str);
Console.ReadKey();
}
}
你可以试试这个(也许对你有帮助-对我来说-这是工作):

使用System.Collections.ObjectModel;
使用系统、管理、自动化;
静态void Main(字符串[]参数)
{
var variable=PowerShell.Create().AddScript($xtr=converttosecurestring-key(1..16)-string“+
“'76492D1116743F0423413B16050A5345MGB8AEQABQBIAEQB6ADCAEQA0AH”+
“UAAAB6AFEAAWBJAEYAVAA0AHCAUWBOAGCAPQA9AHAWAMQAZAUAUWBMADIAOAAXADEANWAWAGUAZQBJADMANWBLAG”+
“Qayqaxadcazabladeamqbagyazgbiadkaoqbiadiamawagmaga1ageazgaxadcamabhadaybjagiamqbadaazaawadmamwazadmaoqawadcayqazagmanwa=”+
“;$PwdPointer=[Runtime.InteropServices.Marshal]::SecureStringToBSTR($xtr);”+
“$PlainTextPassword=[Runtime.InteropServices.Marshal]::PtrToStringAuto($PwdPointer);$PlainTextPassword”).AddCommand(“输出字符串”);
集合结果=variable.Invoke();
foreach(结果中的var str)
{
控制台写入线(str);
Console.ReadKey();
}
}

当我执行此操作时,str=System.Security.SecureString,但如何在var-credentials=new-PSCredential(Username,new_-sec_-pass)中使用它?好啊你能做到吗foreach(结果中的var str)
{Console.WriteLine(Convert.ToString(str));Console.ReadKey();}
我的脚本如下所示:
instance.AddScript($decryptedpw=converttosecurestring-key(1..16)-string 76492d1..;$decryptedpw”).AddCommand(“out string”);var psOutput=instance.Invoke();foreach(pOutput中的var result){Console.WriteLine(result);Console.WriteLine(Convert.ToString(result));
两个相同的输出:System.Security.SecureStringYes.抱歉=)。您可以转换它。我编辑我的答案。如果您运行此代码-它会将您的安全字符串转换为非安全密码谢谢。在我的第一篇文章中查找更新,我找到了另一个解决方案。当我这样做时,str=System.Security.SecureString,但我如何使用此then in var credentials=new PSCredential(Username,new_sec_pass);?好的。你能这样做吗?:foreach(结果中的var str)
{Console.WriteLine(Convert.ToString(str));Console.ReadKey();}
我的脚本如下所示:
instance.AddScript(“$decryptedpw=converttosecurestring-key(1..16)-string 76492d1..;$decryptedpw”).AddCommand(“out string”);var psOutput=instance.Invoke();foreach(psOutput中的var result){Console.WriteLine(result);Console.WriteLine(Convert.ToString(result));
两个输出相同:System.Security.SecureStringYes.抱歉=)。您可以转换它。我编辑我的答案。如果您运行此代码,它会将您的安全字符串转换为非安全密码谢谢。在我的第一篇文章中查找更新,我找到了另一个解决方案。
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();

            }
        }