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

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

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

Не получается дешифровать файл, не могу понять в чем проблема.
Скорее всего с байтами outdata нагрешил
C#
1
public void Encrypt128(byte[] indata, byte[] outdata, uint[] ekey, string savefile);
0
Вложения
Тип файла: rar aestest.rar (78.0 Кб, 14 просмотров)
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2016, 23:38
Ответы с готовыми решениями:

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

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

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

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

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

Решение

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

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

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

Цитата Сообщение от OOP Посмотреть сообщение
Anklav, Понятно, спасибо, и нет использовалось false
К сожалению в примере этого не видно. А опыт того, что у вас оно не работает, а у меня работает - говорит о обратном.
0
1 / 1 / 0
Регистрация: 18.03.2015
Сообщений: 53
31.03.2016, 23:05  [ТС] 5
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
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
31.03.2016, 23:20 6
OOP, нет этот алгоритм должен шифровать блок данных полностью.

Работает быстро т.к. Miсrosoft использует нативную библиотеку, которая в свою очередь должна использовать мультимедийное расширение процессора AESNI, если железо его поддерживает.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2016, 23:20

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

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

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

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

Дешифрование
У Страуструпа есть такие упражнения 11. (*2) Напишите шифрующую программу, которая читает ...

Дешифрование
Нужно сделать дешифратор к шифру Гронсфельда, сделал только шифрование, помогите пожалуйста! Вот...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.