У меня есть пример шифрования с 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]);
}
Мне нужно зашифровать строку из 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]);
}
Может ли кто-нибудь помочь мне получить правильное шифрование?
Задача ещё не решена.
Других решений пока нет …