簡體   English   中英

您可以將變量傳遞到C#編譯器代碼中嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM