C ++ Des шифрование с 16-байтовым ключом

Я пытаюсь зашифровать в DES текст с динамической длиной с помощью 16-байтового ключа, но есть проблема с размером блока ключа и текста, я использую библиотеку openssl для шифрования DES. Как я могу использовать ключи длиной 16 байт.

Вот мой пример:

char * Encrypt( char Key, char *Msg, int size) {
static char*    Res;
DES_cblock      Key2;
DES_key_schedule schedule;

Res = ( char * ) malloc( size );

memcpy(Key2, Key, 8);
DES_set_odd_parity( &Key2 );
DES_set_key_checked( &Key2, &schedule );

unsigned char buf[9];
buf[8] = 0;

DES_ecb_encrypt(( DES_cblock  ) &Msg, ( DES_cblock  ) &buf, &schedule, DES_ENCRYPT );
memcpy(Res, buf, sizeof(buf));
return (Res);
}

int main(int argc, char const *argv[]) {
char key[] = "password";
char clear[] = "This is a secret message";
char *encrypted;

encrypted = (char *) malloc(sizeof(clear));

printf("Clear text\t : %s \n",clear);

memcpy(encrypted, Encrypt(key, clear, sizeof(clear)), sizeof(clear));

printf("Encrypted text\t : %s \n",encrypted);
return 0;
}

2

Решение

  1. DES имеет 8-байтовый 56-битный ключ (LSB не используется как часть ключа, он используется для контроля четности), поэтому вы не можете использовать 16-байтовый ключ (четность обычно игнорируется).

  2. Не используйте DES, это небезопасно и было заменено на AES.

  3. Не используйте режим ECB, это небезопасно, смотрите Режим ЕЦБ, прокрутите вниз до пингвина.

AES позволяет использовать 128, 192 и 256-битные ключи.

4

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

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

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