В настоящее время я работаю над шифрованием / дешифрованием простых текстовых файлов, которые встроены в DLL-файл.Простые текстовые файлы являются сценариями и анализируются по мере необходимости.
В настоящий момент загружаются файлы сценариев (в виде простого текста):
string RunLocation = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Assembly _assembly = Assembly.LoadFrom(RunLocation + "\\<name of dll>.dll");
s = new StreamReader(_assembly.GetManifestResourceStream(File));
RunScript(s);
Метод RunScript считывает одну строку сценария в строку, а затем анализирует ее.Он просматривает каждую строку по очереди и выполняет каждое из действий, которые мы определяем в скрипте, по мере их обнаружения.
Поскольку файлы dll не шифруются, мы решили зашифровать каждое из них.файлов сценариев, прежде чем они будут встроены в DLL.Мы выбрали алгоритм Rijndael из-за легкости его реализации в C # /. NET.
В настоящее время шифрование выполняется следующим образом:
FileStream fileStreamForEncryption = new FileStream (inputFileToBeEncrypted, FileMode.Create);
RijndaelManaged rijndaelCryptography = new RijndaelManaged();
CryptoStream encryptionStream = new CryptoStream(fileStreamForEncryption, rijndaelCryptography .CreateEncryptor(key, iv), CryptoStreamMode.Write);
FileStream fsIn = new FileStream(inputFile, FileMode.Open);
int data;
while ((data = fsIn.ReadByte()) != -1)
cs.WriteByte((byte)data);
fsIn.Close();
cs.Close();
fileStreamForEncryption .Close()
Это означает, что дешифрование является вопросомвыполнения нескольких команд и получения расшифрованного файла ... за исключением того, что из-за дизайна остальной части кода (шифрование, по-видимому, было «когда мы установили систему, работающую по заданному стандарту»),Файл должен быть возвращен как объект StreamReader.На данный момент, вот как я расшифровываю запрошенный файл:
string decodedFile = null;
FileStream fileToDecrypt= new FileStream(_assembly.GetManifestResourceStream(File).ToString(), FileMode.Open);
/* I know that the above line is overly complicated, it's because our files are read into StreamReader objects (as I've explained above) */
RijndaelManaged rijndaelCryptography = new RijndaelManaged();
try
{
CryptoStream cs = new CryptoStream(fileToDecrypt, rijndaelCryptography .CreateDecryptor(key, iv), CryptoStreamMode.Read);
using (StreamReader decryptReader = new StreamReader(cs))
{
decodedFile = decryptReader.ReadToEnd();
}
catch (Exception e)
{
MessageBox.Show(e.Message);
}
Кто-нибудь знает, как я могу расшифровать файл, используя Rijndael, но сделать вывод доступным как / чтение в экземпляробъект StreamReader?
Я долго осматривался в Интернете, чтобы найти способы сделать это, и самым близким, что я получил, было копирование содержимого decryptReader в другой объект StreamReader вместо дешифрования в строку, но этокажется, что вы не можете скопировать содержимое одного StreamReader в другой StreamReader - поправьте меня, если я ошибаюсь.
Я бы хотел изменить как можно меньше существующего (то, чего у меня нетподелился здесь) Основой кода, насколько это возможно, так как это может привести к возникновению ошибок.Я также хотел бы сделать это, не записывая файл обратно на диск (очевидно, есть причина, по которой мы их шифруем).
Заранее спасибо, и извините, если я не был достаточно ясен илинемного расплывчатоЯ могу добавить больше информации, если вам это нужно, чтобы помочь мне.
Джейми