Здравствуйте! Все чаще встречаю вопросы друзей и коллег, да и просто запросов на тему «как же реализовать шифрование на языке С#». Так вот кому будет интересно расскажу как это можно реализовать.
Режим 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();
}
Не забываем закрывать файлы после выполнения операций иначе будут сыпаться ошибки так как потоки не будут закрыты.
Автор: samuraIII