Здравствуйте! Все чаще встречаю вопросы друзей и коллег, да и просто запросов на тему «как же реализовать шифрование на языке С#». Так вот кому будет интересно расскажу как это можно реализовать.
Режим ECB — метод применения блочного шифра, позволяющий преобразовать последовательность блоков открытых данных в последовательность блоков зашифрованных данных. Более точно вы сможете узнать на Википедии. Я же перейду сказу к сути вопроса.
К примеру у нас есть файл, который нужно зашифровать. Первое что приходит на ум: должна быть функция, которая в качестве аргумента принимает файл или путь к нему. Назовем эту функцию _CRYPTO:
На самом деле все просто! Переменная Key может принимать любые значения, какие вы пожелаете. Например я делал генератор, который выдавал случайную комбинацию и писал ее в файл. RMCrypto.Mode = CipherMode.ECB осуществляет тип шифрования. Самое интересное в этом коде, это параметр записи типа Encoding.Unicode. Тут мы меняем кодировку для шифрования.
Ну и функция реализующая расшифровку файла DERCYPTO:
Не забываем закрывать файлы после выполнения операций иначе будут сыпаться ошибки так как потоки не будут закрыты.
Режим ECB — метод применения блочного шифра, позволяющий преобразовать последовательность блоков открытых данных в последовательность блоков зашифрованных данных. Более точно вы сможете узнать на Википедии. Я же перейду сказу к сути вопроса.
К примеру у нас есть файл, который нужно зашифровать. Первое что приходит на ум: должна быть функция, которая в качестве аргумента принимает файл или путь к нему. Назовем эту функцию _CRYPTO:
static void CRYPTO(string f) { string H = File.ReadAllText(f); FileStream FILE = File.Open(f, FileMode.Open); byte[] Key = Encoding.Default.GetBytes("key12345678"); Array.Resize(ref Key, 16); RijndaelManaged RMCrypto = new RijndaelManaged(); RMCrypto.Mode = CipherMode.ECB; RMCrypto.Padding = PaddingMode.Zeros; RMCrypto.KeySize = 128; RMCrypto.Key = Key; ICryptoTransform Encryptor = RMCrypto.CreateEncryptor(); CryptoStream Crypt = new CryptoStream(FILE, Encryptor, CryptoStreamMode.Write); using (StreamWriter sw = new StreamWriter(Crypt, Encoding.Unicode)) { sw.Write(H); sw.Flush(); } Console.WriteLine(H); FILE.Close(); }
На самом деле все просто! Переменная Key может принимать любые значения, какие вы пожелаете. Например я делал генератор, который выдавал случайную комбинацию и писал ее в файл. RMCrypto.Mode = CipherMode.ECB осуществляет тип шифрования. Самое интересное в этом коде, это параметр записи типа Encoding.Unicode. Тут мы меняем кодировку для шифрования.
Ну и функция реализующая расшифровку файла DERCYPTO:
static void DECRYPTO(string f) { FileStream FILE = File.Open(f, FileMode.Open); string S = FILE.ToString(); string plaintext = null; byte[] Key = Encoding.Default.GetBytes("key12345678"); Array.Resize(ref Key, 16); RijndaelManaged RMCrypto = new RijndaelManaged(); RMCrypto.Mode = CipherMode.ECB; RMCrypto.Padding = PaddingMode.Zeros; RMCrypto.KeySize = 128; RMCrypto.Key = Key; ICryptoTransform Decryptor = RMCrypto.CreateDecryptor(); CryptoStream Crypt = new CryptoStream(FILE, Decryptor, CryptoStreamMode.Read); using (StreamReader sw = new StreamReader(Crypt, Encoding.Unicode)) { plaintext = sw.ReadToEnd(); } File.WriteAllText(f, plaintext.ToString()); Console.WriteLine(plaintext); FILE.Close(); }
Не забываем закрывать файлы после выполнения операций иначе будут сыпаться ошибки так как потоки не будут закрыты.
