openssl и магически 3des ECB
Подскажите пожалуйста не могу разобраться , у меня есть пример ключа и сообщение которое нужно расшифровать с помощью 3des-ecb и ответ , так как в криптографии я чуть больше чем ничего то решил сразу взять openssl ведь там есть готовое решение. Проблемы с которыми я сталкнулся :
Ключ у меня один : 000102030405060708090A0B0C0D0E0F и его размер 16 байт (128 бит если кому то будет проще), а в алгоритме используется 3 ключа по 8 байт , на зарубежных форумах вычитал что в таком случае стоит использовать первый ключ дважды для значения первого ключа и третьего соответсвенно. Может быть кто то знающий подскажет.
Блок сообщения тоже по 8 байт , и вот тут главный вопрос если мое сообщение больше как мне прогнать сообщение что бы расшифровать. Приведу ниже пример кода , но это какой то туторчик из интернета модифицированный мной. Если у вас будут предложения пожалуйста поделитесь , нет достаточно хорошего гайда по использованию этого куска openssl =)
DES_cblock Key1 = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; DES_cblock Key2 = { 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; DES_cblock Key3 = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 }; DES_key_schedule SchKey1,SchKey2,SchKey3; int main() { //Так как сообщение больше чем 8 то разделил его по 8 DES_cblock input_data = {0x03,0x05,0x30,0x01,0x04,0x13,0x01,0x01}; DES_cblock input_dataNew = {0x00,0x11,0x02,0x00,0x31,0x01,0x00,0x0D}; if ( -2 == (DES_set_key_checked(&Key1, &SchKey1) || DES_set_key_checked(&Key2, &SchKey2) || DES_set_key_checked(&Key3, &SchKey3))) { printf(" Weak key ....\n"); return 1; } DES_cblock cipher; DES_cblock cipher2; DES_cblock text; DES_ecb3_encrypt(&input_data, &cipher, &SchKey1, &SchKey2, &SchKey3, DES_DECRYPT); DES_ecb3_encrypt(&input_dataNew, &cipher2, &SchKey1, &SchKey2, &SchKey3, DES_DECRYPT); print_data("\n Encrypted", (const void*) cipher, sizeof(input_data)); print_data("\n Encrypted", (const void*) cipher2, sizeof(input_data)); return 0; }