Программа ИБ Библиотека шифрования XTEA3 на С++

Кто просматривает этот контент: "Тема" (Всего пользователей: 0; Гостей: 1)

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
5 710
Репутация
242
Jabber
Telegram
#1
Иногда бывают ситуации, что нужен боле-менее надежный алгоритм, простой в реализации и быстрый.

Можно использовать XOR, но этот алгоритм уязвим и расшифровать его вполне-себе можно, если будет необходимость.

Есть достаточно популярный агоритм блочного симметричного шифрования XTEA и его модификации, в данном случае решил написать библиотеку модифицированного алгоритма XTEA3 (https://ru.wikipedia.org/wiki/XTEA).

Причина написания этой библиотеки:

1)Так и неувидел нормальной реализации на С++;

2)Т.к. алгоритм блочный, то размер шифрованного образца, будет выровнен по длине блока, а длина блока у каждой реализации разная, поэтому в имеющихся реализаций, программист сам должен это учитывать,

В МОЕЙ РЕАЛИЗАЦИИ ЭТО УЧИТЫВАТЬ НЕ НУЖНО, при шифровки/расшифровки выделяется буфер уже выровненного размера и работа будет уже с этим буфером, также в зашифрованном буфере хранится размер зашифрованного образца и размер расшифрованного образца.

Все эти данные можно получить в методах библиотеки.

3)В данной реализации можно шифровать любые данные, хоть строки, хоть бинарные данные.

Где можно использовать этот алгоритм:

1)Данный алгоритм с одной стороны простой в реализации и очень быстрый.

А с другой стороны, весьма надежный и тяжело определить, что данные пошифрованные, а не то-что это просто набор данных.

Поэтому можно использовать в встраиваемых системах, где требуется защита данных.

2)Можно использовать в протекторах и крипторах.

Также отлично подойдет для защиты логов, например в кейлоггере и стилере.)

3)Можно использовать для шифровании больших объемов данных.

Описание библиотеки:

1)Данный алгоритм использует 32-х байтный ключ, поэтому перед шифрованием нужно выделить под него память, например:

(uint32_t key[8] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}).

Далее, всё просто:

2)Создаем класс:

xtea3 *ptr_xtea_lib = new xtea3;

3)У xtea3 есть следующие методы:

** - uint8_t *data_crypt(const uint8_t *data, const uint32_t key[8], uint32_t size); **

Метод зашифрует данные, указателя uint8_t *data, ключём uint32_t key[8] и размером uint32_t size.

Возвращает указатель на буфер пошифрованных данных (В случае ошибки, возратит NULL).

** - uint8_t *data_decrypt(const uint8_t *data, const uint32_t key[8], uint32_t size); **

Метод расшифрует данные, указателя uint8_t *data, ключём uint32_t key[8] и размером uint32_t size.

Возвращает указатель на буфер расшифрованных данных (В случае ошибки, возратит NULL).

** - uint32_t get_decrypt_size(void); **

Метод вернет размер буфера зашифрованных данных.

** - uint32_t get_crypt_size(void); **

Метод вернет размер буфера расшифрованных данных.

** - void free_ptr(uint8_t *ptr); **

Освободит память по указателю ptr.

Пример использования:

1)Создаем класс:

xtea3 *ptr_xtea_lib = new xtea3;

2)Создадим ключ:

uint32_t key[8] = {0x11, 0x55, 0xAA, 0x88, 0x12, 0x55, 0x77, 0x12};

3)Зашифруем данные и получим указатель на зашифрованные данные:

uint8_t p_crypt_data = ptr_xtea_lib->data_crypt((uint8_t)buffer_to_crypt, key, sizeof(buffer_to_crypt));

Проверяем на нулл.

4)Расшифруем данные и получим указатель на расшифрованные данные:

uint8_t p_decrypt_data = ptr_xtea_lib->data_decrypt((uint8_t)p_crypt_data, key, ptr_xtea_lib->get_crypt_size());

Проверяем на нулл.

5)Работаем с расшифрованными/зашифрованными данными, через указатели p_crypt_data и p_decrypt_data.

В конце освобождаем память, так:

xtea3->free_ptr (p_crypt_data);

xtea3->free_ptr (p_decrypt_data);

Можно шифровать как строки, так и любые бинарные данные (картинки, файлы и т.д.), В xtea3_lib.cpp ПРИМЕР КОДА ШИФРОВАНИЯ СТРОКИ И БИНАРНОГО ФАЙЛА, С ПОДРОБНЫМИ КОМЕНТАРИЯМИ.

В папке example, собранный пример.)

Исходник тут:https://github.com/XShar/xtea3_lib
 

Edith Wooten

Житель форума
Форумчанин
Регистрация
17.04.2019
Сообщения
100
Репутация
19
#2
А это лучше чем xor?
 

virt

Уважаемый пользователь
Форумчанин
Регистрация
24.11.2016
Сообщения
598
Репутация
196
Jabber
Telegram
#3

Edith Wooten

Житель форума
Форумчанин
Регистрация
17.04.2019
Сообщения
100
Репутация
19
#4
а расшифрованная строка будет видна в иде?
 

virt

Уважаемый пользователь
Форумчанин
Регистрация
24.11.2016
Сообщения
598
Репутация
196
Jabber
Telegram
#7
с памяти можно скрыть присутствие пароля?
Антидамп нужен, как вариант.

Вообще непонятно что хотите сделать ?

Пароль необязательно передавать, можно например из пароля делать хеш и работать с ним, смотря что нужно.
 

Edith Wooten

Житель форума
Форумчанин
Регистрация
17.04.2019
Сообщения
100
Репутация
19
#8
Антидамп нужен, как вариант.

Вообще непонятно что хотите сделать ?

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

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
5 710
Репутация
242
Jabber
Telegram
#9
Можно усложнить способ получения дампа, либо да усложнить поиск.

А найти всегда можно, тут уже вопрос времени и желания.)
 
Вверх