C# 使用C从Powershell解密SecureString#
我有以下Powershell代码来加密我的密码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
$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();
}
}