Главная страница » Статьи и уроки » C# статьи » Реализация ECB шифрования с помощью библиотеки Маршала в языке С#
Опрос
Какие статьи добавлять?
Выделенные и виртуальные серверы в Европе

Реализация ECB шифрования с помощью библиотеки Маршала в языке С#

Автор: administrator Дата: 12-03-2016, 00:11 Категория: Статьи и уроки / C# статьи
Режим 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();
        }


Не забываем закрывать файлы после выполнения операций иначе будут сыпаться ошибки так как потоки не будут закрыты.
Просмотров: 2 183 Напечатать Жалоба
Теги: ECB
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо зайти на сайт под своим именем.
Написать комментарий
Ваше Имя:
Ваш E-Mail:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent

Введите два слова, показанных на изображении: