Oto moja aktualna sytuacja - mam aplikację, która kompiluje kod C# jako ciąg znaków, używając CodeDom. Mam SecureString, który przechowuje hasło i zastanawiałem się, czy istnieje jakiś sposób przekazania tej zmiennej SecureString do skompilowanego kodu jako SecureString?Czy można przekazać zmienną do kodu kompilatora C#?
Oto przykładowy kod:
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);
nie mogę znaleźć sposób, aby to zrobić i sądzę, że nie jest to faktycznie możliwe, a zamiast tego należy ewentualnie tylko przechowywać hasła w zaszyfrowanym pliku i przeczytać z tego?
Piszesz exe, więc i tak chcesz umieścić w nim hasło w postaci szeregowej. To nie jest tak, że dajesz wartość uruchomionemu programowi. – GSerg
(Które można wygodnie zrobić przez [dodanie zasobu] (http://stackoverflow.com/q/13666956/11683) do swojego zespołu, który zawiera zaszyfrowany obszar typu blob). – GSerg
@GSerg To genialny pomysł, czy zasoby są wbudowane w rzeczywisty plik EXE, czy też będą przechowywane osobno (w oddzielnym pliku), ponieważ jeśli są przechowywane osobno, to równie dobrze mogę zaszyfrować ciąg i wysłać go do txt plik? – Jake