Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 18.03.2015
Сообщений: 53

Не выполняется AES дешифрование

30.03.2016, 23:38. Показов 1996. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не получается дешифровать файл, не могу понять в чем проблема.
Скорее всего с байтами outdata нагрешил
C#
1
public void Encrypt128(byte[] indata, byte[] outdata, uint[] ekey, string savefile);
Вложения
Тип файла: rar aestest.rar (78.0 Кб, 14 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2016, 23:38
Ответы с готовыми решениями:

AES 192 и AES 256
Добрый день! Возможно ли в Java сделать шифрование с помощью AES 256- или 192-битными ключами? Единственное условие, что мешает мне...

Проект выполняется на Windows 8, но не выполняется на виртуальной машине
У меня есть проект, собранный в релиз, в котором осуществляется внедрение своей dll в память чужих процессов (после внедрения в DLL...

Код не выполняется в одном месте, но выполняется в другом
Вот код процедуры: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; ...

5
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
31.03.2016, 21:02
Лучший ответ Сообщение было отмечено OOP как решение

Решение

Во первых у вас пример кривой, он не будет шифровать файл целиком, только первые 16 байт.
Во вторых трансформация создается с флагом encrypion = true, и скорее всего использовалась с этим флагом и для дешифрования, что не верно.

Вот переделанный консольный пример, который шифрует и дешифрует 16 байт.
Вложения
Тип файла: zip aestest.zip (21.7 Кб, 22 просмотров)
0
1 / 1 / 0
Регистрация: 18.03.2015
Сообщений: 53
31.03.2016, 22:25  [ТС]
Anklav, Понятно, спасибо, и нет использовалось false,,, интересно почему только первых 16 байт? нужно тогда файл разделить на блоки по 16 и по порядку их шифровать?
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
31.03.2016, 22:40
Потому что AESTansform обрабатывает только по 16 байт. Вы реализацию вообще смотрели? там же очевидно записывается в output только первые 16 байт, посмотрите внимательно.

Для шифрования всего файла вам нужно последовательно передавать в трансформацию по 16 байт, а результаты последовательно записывать в файл. Тогда вы зашифруете файл в режиме ECB, он к слову уязвим.

Цитата Сообщение от OOP Посмотреть сообщение
Anklav, Понятно, спасибо, и нет использовалось false
К сожалению в примере этого не видно. А опыт того, что у вас оно не работает, а у меня работает - говорит о обратном.
0
1 / 1 / 0
Регистрация: 18.03.2015
Сообщений: 53
31.03.2016, 23:05  [ТС]
Anklav, Спасибо за помощь, смотрел и в коде реализацию и вики читал, просто сравнительно небольшой опыт в программированию вот в чем проблема)

Добавлено через 15 минут
получается если шифровать стандартными методами так:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
using System;
using System.Text;
using System.IO;
using System.Security.Cryptography;
 
namespace Rijcrypted
{
    class AesHS
    {
        #region encrypt
        public byte[] AES_Encrypt(byte[] bytesToBeEncrypted, byte[] passwordBytes)
        {
            byte[] encryptedBytes = null;
            byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
 
            using (MemoryStream ms = new MemoryStream())
            {
                using (RijndaelManaged AES = new RijndaelManaged())
                {
                    AES.KeySize = 256;
                    AES.BlockSize = 128;
 
                    var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
                    AES.Key = key.GetBytes(AES.KeySize / 8);
                    AES.IV = key.GetBytes(AES.BlockSize / 8);
 
                    AES.Mode = CipherMode.CBC;
 
                    using (var cs = new CryptoStream(ms, AES.CreateEncryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(bytesToBeEncrypted, 0, bytesToBeEncrypted.Length);
                        cs.Close();
                    }
                    encryptedBytes = ms.ToArray();
                }
            }
 
            return encryptedBytes;
        }
        #endregion
        #region decrypt
        public byte[] AES_Decrypt(byte[] bytesToBeDecrypted, byte[] passwordBytes)
        {
            byte[] decryptedBytes = null;
            byte[] saltBytes = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 };
 
            using (MemoryStream ms = new MemoryStream())
            {
                using (RijndaelManaged AES = new RijndaelManaged())
                {
                    AES.KeySize = 256;
                    AES.BlockSize = 128;
 
                    var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
                    AES.Key = key.GetBytes(AES.KeySize / 8);
                    AES.IV = key.GetBytes(AES.BlockSize / 8);
 
                    AES.Mode = CipherMode.CBC;
 
                    using (var cs = new CryptoStream(ms, AES.CreateDecryptor(), CryptoStreamMode.Write))
                    {
                        cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
                        cs.Close();
                    }
                    decryptedBytes = ms.ToArray();
                }
            }
 
            return decryptedBytes;
        }
        #endregion
        #region encryptfile
        public void EncryptFile(string fileinput, string savefile, string password)
        {
           
            byte[] bytesToBeEncrypted = File.ReadAllBytes(fileinput);
            byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
 
            // Hash the password with SHA256
            passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
 
            byte[] bytesEncrypted = AES_Encrypt(bytesToBeEncrypted, passwordBytes);
 
            string fileEncrypted = savefile;
 
            File.WriteAllBytes(fileEncrypted, bytesEncrypted);
        }
        #endregion
        #region decryptfile
        public void DecryptFile(string fileEncrypted, string savefile, string password)
        {
 
            byte[] bytesToBeDecrypted = File.ReadAllBytes(fileEncrypted);
            byte[] passwordBytes = Encoding.UTF8.GetBytes(password);
            passwordBytes = SHA256.Create().ComputeHash(passwordBytes);
 
            byte[] bytesDecrypted = AES_Decrypt(bytesToBeDecrypted, passwordBytes);
 
            string file = savefile;
            File.WriteAllBytes(file, bytesDecrypted);
        }
        #endregion
 
    }
}
то оно тоже только первых 16 байт шифрует поэтому такая скорость шифрования.
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
31.03.2016, 23:20
OOP, нет этот алгоритм должен шифровать блок данных полностью.

Работает быстро т.к. Miсrosoft использует нативную библиотеку, которая в свою очередь должна использовать мультимедийное расширение процессора AESNI, если железо его поддерживает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2016, 23:20
Помогаю со студенческими работами здесь

не выполняется запрос в коде, но выполняется в phpliteadmin
всем привет! необходима небольшая помощь, есть бд с таблицей "keys" и одной из колонок в ней - "key". также есть запрос: SELECT...

Запрос выполняется в SSMS, но не выполняется в коде C#
Есть некоторый сервер с проверкой подлинности sql. Нужно выполнить хранимую процедуру, которая лежит на этом сервере. Через Sql...

Нужно передать файл, расположенный на рабочей станции, на которой выполняется сервер, на рабочую станцию​​, на которой выполняется клиент. MailSlot
Ребята. Нужна помощь. Нужно передать файл, расположенный на рабочей станции, на которой выполняется сервер, на рабочую...

AES
дорогие программисты помогите пожалуйста влюбленному парню) моя подружка учится на программиста и она сейчас в глубоком стрессе((( ей нужна...

AES в C++
Привет, где можно найти рабочую функцию шифрования/дешифрования AES в С++ ? Работаю в builder Спасибо!


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru