[英]Can you pass a variable into the C# compiler code?
這是我目前的情況-我有一個使用CodeDom編譯以字符串形式接收的C#代碼的應用程序。 我有一個存儲密碼的SecureString,我想知道是否有任何方法可以將該SecureString變量作為SecureString傳遞到已編譯的代碼中?
這是一些示例代碼:
SecureString securePassword = getSecurePass();
string codeString =
@"using System;
using System.Security;
namespace SomeProgram
{
class MyClass
{
static void Main(string[] args)
{
SecureString securePass = new SecureString();
// somehow set this equal to the securePassword variable
}
}
}";
// Compiler Code
CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
string outFile = "output.exe";
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.GenerateExecutable = true;
parameters.OutputAssembly = outFile;
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, codeString);
我找不到執行此操作的方法,並且我想這實際上是不可能的,而應該將密碼存儲在加密文件中並從中讀取密碼?
我認為您對這些概念感到困惑。 您正在嘗試將密碼編譯為exe文件,並且您認為SecureString
將使您的密碼安全。 那不是SecureString
目的。 閱讀文檔 :
(SecureString)表示應保密的文本,例如在不再需要時從計算機內存中刪除它。
SecureString
僅通過以下方式保護您的內存密碼:1)在內存中對其進行加密,以使其他應用程序都無法嗅探,以及2)完成后將其從內存中刪除。
如果將密碼編譯為exe,即使已加密,黑客也可以輕松地從那里獲取密碼。 實際上,從exe文件中獲取要比從內存中獲取要容易得多。 對其進行加密只會使其變得更難,但是熟練的黑客仍然可以在找到密鑰后對其進行解密。 Gseg提出的將其編譯為嵌入式資源的建議,以及您將其加密為文本文件的建議,都將具有相同的問題。
全部歸結為加密密鑰, 它存儲在哪里? 如果將其存儲在exe文件中(因為您需要您的應用程序才能對其進行解密),則黑客將能夠找到密鑰並將其用於解密密碼。 您將需要以黑客無法訪問的方式將其存儲在exe外部。 因此,您需要考慮的真正問題是: 將加密密鑰存儲在哪里,以便應用程序可以讀取它,但黑客卻不能? 。
現在,當您的應用檢索密鑰時,現在您可以將密碼解密為SecureString
變量,以保護它在內存中,然后將其刪除。
那么,您所需要的只是找到一種將SecureString
更改為System.String
。
已經在這里回答: 如何將SecureString轉換為System.String?
string codeString =
String.Format(@"using System;
using System.Security;
namespace SomeProgram
{
class MyClass
{
static void Main(string[] args)
{
SecureString securePass = new SecureString();
{0} // use it the way u like
}
}
}", SecureStringToString(securePassword));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.