шифрование — шифрование длинных данных с помощью 3DES ECB с использованием OpenSSL в Stack Overflow

У меня есть пример шифрования с 3DES, который правильно шифрует строку из 8 значений, это пример:

void encript3DES()
{
unsigned char out[8] = {0};

des_cblock key1 = {0x85, 0xAC, 0xDA, 0x3F, 0x31, 0x87, 0xC5, 0x57};
des_cblock key3 = {0x85, 0xAC, 0xDA, 0x3F, 0x31, 0x87, 0xC5, 0x57};
des_cblock key2 = {0x3E, 0x43, 0x7E, 0xDE, 0x55, 0x6D, 0x4B, 0x5B};

des_key_schedule ks1, ks2, ks3;

unsigned char in[8] = {0x42, 0x13, 0x16, 0x60, 0x62, 0x18, 0x78, 0x63};

int i = 0;

DES_set_key((C_Block *)key1, &ks1);
DES_set_key((C_Block *)key2, &ks2);
DES_set_key((C_Block *)key3, &ks3);

for (i = 0; i < 7; i++)
{
printf("0x%02X, ", in[i]);
}

printf("0x%02X\n", in[i]);

DES_ecb3_encrypt((C_Block *)in, (C_Block *)out, &ks1, &ks2, &ks3, DES_ENCRYPT);

for (i = 0; i < 7; i++)
{
printf("0x%02X, ", out[i]);
}

printf("0x%02X\n", out[i]);
}
  • ВХОДНЫЕ ДАННЫЕ: 4213166062187863
  • KEY: 85ACDA3F3187C5573E437EDE556D4B5B85ACDA3F3187C557
  • ВЫХОДНЫЕ ДАННЫЕ: 43B5EBBA7F282362

Мне нужно зашифровать строку из 24 символов вместо 8, используя тот же ключ, я думаю, что эта функция шифрует только строки длиной 8, поэтому я изменил предыдущий пример, чтобы добиться шифрования строки из 24, однако результат не ожидается, это модифицированная функция:

void encript3DES()
{
unsigned char out[24] = {0};

des_cblock key1 = {0x85, 0xAC, 0xDA, 0x3F, 0x31, 0x87, 0xC5, 0x57};
des_cblock key3 = {0x85, 0xAC, 0xDA, 0x3F, 0x31, 0x87, 0xC5, 0x57};
des_cblock key2 = {0x3E, 0x43, 0x7E, 0xDE, 0x55, 0x6D, 0x4B, 0x5B};

des_key_schedule ks1, ks2, ks3;

unsigned char in[24] = {0x42, 0x13, 0x16, 0x60, 0x62, 0x18, 0x78, 0x63,
0xD2, 0x00, 0x42, 0x21, 0x08, 0x23, 0x81, 0x27,
0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};

int i = 0;

DES_set_key((C_Block *)key1, &ks1);
DES_set_key((C_Block *)key2, &ks2);
DES_set_key((C_Block *)key3, &ks3);

for (i = 0; i < 23; i++)
{
printf("0x%02X, ", in[i]);
}

printf("0x%02X\n", in[i]);

for(int incr = 0; incr <= 24; incr += 8)
{
DES_ecb3_encrypt((C_Block *)in + incr, (C_Block *)out + incr, &ks1, &ks2, &ks3, DES_ENCRYPT);
}

for (i = 0; i < 23; i++)
{
printf("0x%02X, ", out[i]);
}

printf("0x%02X\n", out[i]);
}

Может ли кто-нибудь помочь мне получить правильное шифрование?

  • НОВЫЕ ВХОДНЫЕ ДАННЫЕ: 4213166062187863D20042210823812700000FFFFFFFFFFF
  • KEY: 85ACDA3F3187C5573E437EDE556D4B5B85ACDA3F3187C557
  • НОВЫЕ ВЫХОДНЫЕ ДАННЫЕ: 43B5EBBA7F28236200000000000000000000000000000000
  • Желаемые выходные данные: 43B5EBBA7F2823623D13732603C453138C0D98E88B8F25C7

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector