Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/161: Рейтинг темы: голосов - 161, средняя оценка - 4.51
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
.NET 4.x

Шифрование файлов AES алгоритмом

15.09.2011, 18:05. Показов 33358. Ответов 29

Студворк — интернет-сервис помощи студентам
Здравствуйте, не могу решить проблему с дешифровкой файлов, при дешифровке строки написанные русскими буквами превращаются в псевдографику (квадраты).

Прошу помочь в данной проблеме!

Вот код дешифровки:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
if (openfile.ShowDialog() == DialogResult.OK)
            {
                    FileStream fsFileIn = File.OpenRead(textBox2.Text);
 
                    FileStream fsKeyFile = File.OpenRead(openfile.FileName);
 
                    FileStream fsFileOut = File.Create(textBox2.Text+"_decrypt");
 
                    AesCryptoServiceProvider cryptAlgorithm = new AesCryptoServiceProvider();
                    BinaryReader brFile = new BinaryReader(fsKeyFile);
                    cryptAlgorithm.Key = key;
                    cryptAlgorithm.IV = iv;
 
 
                    CryptoStream csEncrypt = new CryptoStream(fsFileIn, cryptAlgorithm.CreateDecryptor(), CryptoStreamMode.Read);
 
 
                    StreamReader srStream = new StreamReader(csEncrypt);
                    StreamWriter swStream = new StreamWriter(fsFileOut);
                        
                    swStream.WriteLine(srStream.ReadToEnd());
                    
                    swStream.Close();
                    fsFileOut.Close();
                    srStream.Close();
 
            }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.09.2011, 18:05
Ответы с готовыми решениями:

Зашифровать файл любого типа с пользовательским паролем, желательно — AES алгоритмом
Необходимо зашифровать файл любого типа с пользовательским паролем, желательно - AES алгоритмом. Как бы сделать такое?

Aes шифрование
Привет, нужна помощь, есть программная реализация aes, помогите определить в каком режиме шифрования она выполнена , если таковой вообще...

AES шифрование, ошибка в дешифровке
Приветы! Задача такова: пользователь выбирает файл, файл шифруется, создается зашифрованный файл, файл расшифровывается и создается...

29
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
15.09.2011, 18:30
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using System.Security.Cryptography;
using System.IO;
 
class Program
{
    static void Main(string[] args)
    {
        AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
        aes.GenerateIV();
        byte[] iv = aes.IV;
        aes.GenerateKey();
        byte[] key = aes.Key;
        ICryptoTransform cryptoTransform = aes.CreateEncryptor();
        MemoryStream memoryStream = new MemoryStream();
        CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoTransform, CryptoStreamMode.Write);
        StreamWriter streamWriter = new StreamWriter(cryptoStream);
        string text = "привет, мир";
        streamWriter.Write(text);
        byte[] enryptText = memoryStream.ToArray();
        streamWriter.Dispose();
        cryptoStream.Dispose();
        memoryStream.Dispose();
        memoryStream = new MemoryStream(enryptText);
        cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(), CryptoStreamMode.Read);
        StreamReader streamReader = new StreamReader(cryptoStream);
        string decryptText = streamReader.ReadToEnd();
        streamWriter.Dispose();
        cryptoStream.Dispose();
        memoryStream.Dispose();
        Console.WriteLine("Текст: " + text);
        Console.ReadLine();
    }
}
1
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
15.09.2011, 19:19  [ТС]
спасибо, но так и не понял почему у меня текст кодирует неправильно, если можно - поясни код, вот мой проект полностью:
EDS-File.zip
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
15.09.2011, 19:32
Может Вы файл считываете в кодировке windows-1251, а затем шифруте его как UTF-8.
2
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
15.09.2011, 19:48  [ТС]
Цитата Сообщение от Петррр Посмотреть сообщение
Может Вы файл считываете в кодировке windows-1251, а затем шифруте его как UTF-8.
Точно, надо преобразовывать поток в UTF8, спасибо.
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
16.09.2011, 10:34  [ТС]
Другая беда, текстовые файлы шифрует и дешифрует отлично, а вот бинарные и прочие форматы файлов дешифрует коряво, после чего они не открываются...

EDS-File.zip
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
16.09.2011, 19:03  [ТС]
ни у кого такого не случалось, голову ломаю почему не выходит, гугл уже даже не помогает )
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
16.09.2011, 22:37
В Вашем коде не разбирался, т.к. когда-то делал заготовку под симметричные алгоритмы, её в Вашем проекте и применил (там 2 метода CryptFile, DecryptFile).

Принцип остался тот-же:
1) Выбрать файл для шифрования -> будет создан файл рядом с существующим, с расширением *.crypt
2) Ключи сохранятся в Application.StartupPath + "\\keys\\" + имя_файла_плюс_.key
3) Выбрать файл для дешифровки с расширением *.crypt -> Будет создан файл рядом с существующим, с расширением *.decrypt
Вложения
Тип файла: rar EDS-File.rar (24.3 Кб, 815 просмотров)
2
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
16.09.2011, 23:57  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
В Вашем коде не разбирался, т.к. когда-то делал заготовку под симметричные алгоритмы, её в Вашем проекте и применил (там 2 метода CryptFile, DecryptFile).

Принцип остался тот-же:
1) Выбрать файл для шифрования -> будет создан файл рядом с существующим, с расширением *.crypt
2) Ключи сохранятся в Application.StartupPath + "\\keys\\" + имя_файла_плюс_.key
3) Выбрать файл для дешифровки с расширением *.crypt -> Будет создан файл рядом с существующим, с расширением *.decrypt
и чем собственно он отличается от моего? Может и не стоило так сильно всё переделывать? Потому как сейчас я вообще не могу разобраться в коде...
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
17.09.2011, 00:46  [ТС]
SSTREGG, можете хотябы коменты к коду дать, что и для чего вообще используется, например вот это:
C#
1
2
3
4
5
6
7
8
9
                var rnd = RNGCryptoServiceProvider.Create();
                byte[] buff0 = new byte[aes.KeySize / 8],
                       buff1 = new byte[16];
 
                rnd.GetNonZeroBytes( buff0 );
                rnd.GetNonZeroBytes( buff1 );
 
                fs.Write( buff0, 0, buff0.Length );
                fs.Write( buff1, 0, buff1.Length );
или вот это:
C#
1
2
3
4
5
6
7
8
9
10
                using ( var fs = File.Open( fileIn, FileMode.Open, FileAccess.Read ) ) {
                    buff = new byte[fs.Length + sizeof( long )];
                    fs.Read( buff, sizeof( long ), buff.Length - sizeof( long ) );
                    /* Записываем в первые 8 байт длину исходного файла
                     * нужно это для того чтобы, после дешифровки не было
                     * лишних данных
                     */
                    int i = 0;
                    foreach ( byte @byte in BitConverter.GetBytes( fs.Length ) )
                        buff[i++] = @byte;
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
17.09.2011, 00:56
Цитата Сообщение от >arty< Посмотреть сообщение
и чем собственно он отличается от моего?
Реализацией.
Цитата Сообщение от >arty< Посмотреть сообщение
Может и не стоило так сильно всё переделывать?
У меня не было желания выискивать ошибку в Вашем коде, можете подождать, возможно кому-то будет интересно. Я использовал проверенную реализацию, которая поддерживает все симметричные алгоритмы .NET.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Создаем генератор случайных чисел
// [url]http://msdn.microsoft.com/ru-ru/library/system.security.cryptography.rngcryptoserviceprovider.aspx[/url]
var rnd = RNGCryptoServiceProvider.Create();
// Создаем буфер, равный длине ключа, и длине вектора (16 байт)
byte[] buff0 = new byte[aes.KeySize / 8],
       buff1 = new byte[16];
// Заполняем ключ случайными числами
rnd.GetNonZeroBytes( buff0 );
// Заполняем вектор случайными числами
rnd.GetNonZeroBytes( buff1 );
// Пишем ключ в файл
fs.Write( buff0, 0, buff0.Length );
// Пишем вектор в файл
fs.Write( buff1, 0, buff1.Length );
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using ( var fs = File.Open( fileIn, FileMode.Open, FileAccess.Read ) ) {
// Создаем буфер длинной в файл + 8 байт, для хранения изначальной
// длины файла, т.к. при шифровании используется выравнивание по
// определенной длине блока (например 512 байт, или 1024)
// тем самым файл может немного "раздуть" и оригинал при дешифровке
// мы уже не получим
buff = new byte[fs.Length + sizeof( long )];
// Читаем данные в буфер не с самого начала, а со смещением 8 байт
fs.Read( buff, sizeof( long ), buff.Length - sizeof( long ) );
/* Записываем в первые 8 байт длину исходного файла
 * нужно это для того чтобы, после дешифровки не было
 * лишних данных
 */
int i = 0;
// Перевод значение из long в byte[]
foreach ( byte @byte in BitConverter.GetBytes( fs.Length ) )
    buff[i++] = @byte;
1
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
17.09.2011, 11:42  [ТС]
SSTREGG, а реализацию сами делали или где-то брали, если брали, скиньте ссылку на первоисточник пожалуйста, почитаю...
P.S. может посоветуете книжку где описываются примеры шифрования на языке C# ?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
17.09.2011, 11:57
>arty<, сам делал. Книжку не подскажу, т.к. не читал таковых. Читал MSDN и статьи которые попадались в сети.
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
17.09.2011, 12:06  [ТС]
Цитата Сообщение от SSTREGG Посмотреть сообщение
>arty<, сам делал. Книжку не подскажу, т.к. не читал таковых. Читал MSDN и статьи которые попадались в сети.
Очень жаль, хотел свой до ума довести, Ваш хоть и готовый, но это Ваш код!
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
17.09.2011, 12:34  [ТС]
И всё таки я нашёл: Хеширование, шифрование и цифровая подпись
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
30.03.2013, 16:13
Цитата Сообщение от _arty_ Посмотреть сообщение
псевдографику (квадраты).
ууу, на те же грабли натыкался, если при формировании в строку произвольных бинарных файлов, используя например utf-8, utf-8 не найдет код символа, равный значению того или иного байта, то она искажает его(этот байт), делая заглушку.
Например, у меня байт 128 (10000000) заменялся на байт 63 (00111111).
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
30.03.2013, 17:43  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
ууу, на те же грабли натыкался, если при формировании в строку произвольных бинарных файлов, используя например utf-8, utf-8 не найдет код символа, равный значению того или иного байта, то она искажает его(этот байт), делая заглушку.
Например, у меня байт 128 (10000000) заменялся на байт 63 (00111111).
Вопрос уже давно решён, побайтово шифрую и дешифрую....
0
1 / 1 / 0
Регистрация: 08.02.2013
Сообщений: 47
30.04.2013, 01:52
Цитата Сообщение от _arty_ Посмотреть сообщение
Вопрос уже давно решён, побайтово шифрую и дешифрую....
Не могли бы Вы подробней описать как решили свою проблему с квадратами, и вообще как Вы шифруете. У меня стоит похожая задача, вот только шифровать нужно большие файлы и поэтому нельзя применить поток MemoryStream... в потоках уже запутался я...
0
29 / 28 / 7
Регистрация: 10.07.2009
Сообщений: 317
30.04.2013, 06:39  [ТС]
Цитата Сообщение от Strangers Посмотреть сообщение
Не могли бы Вы подробней описать как решили свою проблему с квадратами, и вообще как Вы шифруете. У меня стоит похожая задача, вот только шифровать нужно большие файлы и поэтому нельзя применить поток MemoryStream... в потоках уже запутался я...
Посмотрите ссылку что я приводил выше, там весь необходимый материал.
1
1 / 1 / 0
Регистрация: 08.02.2013
Сообщений: 47
30.04.2013, 22:28
Цитата Сообщение от _arty_ Посмотреть сообщение
Посмотрите ссылку что я приводил выше, там весь необходимый материал.
Большое спасибо. Выручили)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.04.2013, 22:28
Помогаю со студенческими работами здесь

AES шифрование и разные векторы инициализации
Появилась задача шифрования файлов. Выбор пал на AES шифрование. Нашел примерчик: public Form1() { ...

Реализовать шифрование данных с помощью AES алгоритма
добрый день друзья помогите реализовать шифрование данных с помощью AES алгоритма. что бы все обработка производилась на шарпе, база на sql...

Шифрование AES. Переполнение в результате выполнения арифметической операции
Помогите пожалуйста почему выдает ошибку:&quot;Переполнение в результате выполнения арифметической операции&quot; при дешифровании и как убрать...

AES шифрование
Видел кучу тем на эту тему, но так для себя решения и не нашел, здесь реализация заточена на текст, но мне надо шифровать массивы байт и...

Шифрование AES 128.
Привет. Нужно зашифровать string используя AES 128 битный. Что-то написал, но работать отказывается, не пойму от чего!! public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru