1112 / 554 / 319
Регистрация: 21.06.2012
Сообщений: 1,854
1

Подскажите как справиться с алгоритмом AES-128

25.07.2017, 11:42. Показов 1713. Ответов 7
Метки нет (Все метки)

Приветствую всех!

Шифрую данные ключом из 16 бит:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
 
        byte key[] = new byte[]{
                0b0111111,0b1100010,0b1100011,0b1100100,0b1100101,0b1100110,0b110000,0b110001,0b110010,0b110011,0b110100,0b110101,0b110110,0b110111,0b111000,0b111001
        };
        for(int i=0; i<key.length; i++){
            System.out.print((char)key[i]);
        }
        System.out.println();
 
        /* Encrypt the message. */
        SecretKey secret = new SecretKeySpec(key, "AES");
        cipher.init(Cipher.ENCRYPT_MODE, secret);
        AlgorithmParameters params = cipher.getParameters();
        byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
        byte[] ciphertext = cipher.doFinal("123456789012345678901234567890".getBytes("UTF-8"));
 
        String arrByte = new BigInteger(1, ciphertext).toString(16);
        System.out.println(arrByte);
При каждом запуске программы получаю разные закодированные строки, хотя ключ не меняется. Пример двух выводов:
Java
1
2
3
4
?bcdef0123456789
88be0e567212560942295611c216744ef305bb6100d32c69e0cf9364ce31b778
?bcdef0123456789
1308dc7953e77f1e604b45853c000c5e146094cd6d004fd2755c136df0fbf39f
Почему так происходит? Почему один и тот-же ключ шифрует по разному?

И еще один вопрос, как записать в ключ, байт старше 126? То есть, я не могу записать в ключ, к примеру, такой байт: 0b10000000
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2017, 11:42
Ответы с готовыми решениями:

Как реализовать AES (128 BIT) шифрование?
Вопрос в шапке. Требуется реализовать AES 128 BIT шифрование текста. Есть готовый код на PHP...

AES-128
Пишу программное средство шифрования файлов на курсовую .Сделал расширение ключа ExpKey но мой ключ...

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

Шифрование AES 128 в QT
Доброго времени суток. Мне необходимо отправлять/принимать с помощью POST запроса немного...

7
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
27.07.2017, 09:11 2
Цитата Сообщение от sasha0012 Посмотреть сообщение
Почему один и тот-же ключ шифрует по разному?
Первичный ключ шифрования для первого блока создается на основе вашего ключа и рандомного 128-битного значения операцией XOR, что и обуславливает уникальность каждого вывода.
1
1112 / 554 / 319
Регистрация: 21.06.2012
Сообщений: 1,854
27.07.2017, 16:32  [ТС] 3
А как потом расшифровывать кодированный текст? Я сохраняю в файл массив байтов (кодированного текста (.юkџg~м˜*Е¤С»`w)). Но когда пытаюсь раскодировать эти байты тем-же ключом, то выскакивает ошибка: Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded

Если я закодирую одно и тоже слово 3 раза одним ключом, то шифротекст будет разным, и как его потом декодировать одним ключом?
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
27.07.2017, 17:03 4
Лучший ответ Сообщение было отмечено sasha0012 как решение

Решение

Цитата Сообщение от sasha0012 Посмотреть сообщение
Exception in thread "main" javax.crypto.BadPaddingException: Given final block not properly padded
возможно, причина в том, что текст был дополнен нулевыми значениями для выполнения условия кратности 128 битам, а ваш код не предусматривает этого. Попробуйте использовать текст, который будет заведомо кратен 128.

Также, в добавок к предыдущему вопросу, попробуйте шифровать текст не используя режим СВС, тогда не будет добавлено рандомное 128-битное значение, и шифротекст каждый раз будет один и тот же.
1
1112 / 554 / 319
Регистрация: 21.06.2012
Сообщений: 1,854
27.07.2017, 17:07  [ТС] 5
Ага, понял, надо было передавать еще и IvParameterSpec. Хотя не понял как он работает...

Как записать в ключ байт старше 127 (к примеру такой: 0b10000001)?

Добавлено через 2 минуты
Цитата Сообщение от Serg_o_Grey Посмотреть сообщение
попробуйте шифровать текст не используя режим СВС, тогда не будет добавлено рандомное 128-битное значение
теперь понял для чего нужен IvParameterSpec. Спасибо!
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
27.07.2017, 17:22 6
Лучший ответ Сообщение было отмечено sasha0012 как решение

Решение

Цитата Сообщение от sasha0012 Посмотреть сообщение
Как записать в ключ байт старше 127 (к примеру такой: 0b10000001)?
полагаю либо использовать целочисленный тип данных, типа BYTE или unsigned char, либо использовать диапазон не 0..255, а -127..127
Значение 0b10000001 соответствует -127 (минус сто двадцать семь)

Добавлено через 3 минуты
на самом деле 0, 1, ... , 127, -127, -126, ... , -1
1
1112 / 554 / 319
Регистрация: 21.06.2012
Сообщений: 1,854
27.07.2017, 17:36  [ТС] 7
Спасибо!
Вот как, оказывается, можно:
Java
1
2
3
byte[] keyNew = new byte[]{
                127,-127,'j','#',0b1100101,'>','\'','"','$',',','/',0b110101,0x7f,-0,0,0b111001
        };
Все равно не понятно, почему нельзя явно указать биты байта, к примеру все биты единицы: 0b11111111?
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
27.07.2017, 17:51 8
Лучший ответ Сообщение было отмечено sasha0012 как решение

Решение

Цитата Сообщение от sasha0012 Посмотреть сообщение
Все равно не понятно, почему нельзя явно указать биты байта, к примеру все биты единицы: 0b11111111?
Полагаю что тип, которым определяется 0b11111111 является типом int. А при преобразовании в int наше значение равно 255. Значение 127 ассоциируется и с int и с byte, а значение 255 или 129 с byte уже не сопоставимо. Особенности Java.
Для решения проблемы требуется явное преобразование типов
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2017, 17:51
Помогаю со студенческими работами здесь

Алгоритм шифрования AES-128
Здравствуйте программисты!!! :) Подскажите пожалуйста, или покажите какой-то пример реализации...

AES-128 (Crypto API) не шифрует
Написал библиотеку, реализующую шифрование входного файла алгоритмом AES-128 с помощью Crypto API....

Aes 128 cbc неполная расшифровка
пишу тест имплементацию int main(int argc, char* argv) { HCRYPTPROV hProv; HCRYPTKEY hKey;...

Шифрование файлов AES алгоритмом
Здравствуйте, не могу решить проблему с дешифровкой файлов, при дешифровке строки написанные...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru