2016-08-04 2 views
2

Я пытаюсь зашифровать в DES текст с динамической длиной с ключом 16 байт, но есть проблема с размером блока ключа и текста, я использую библиотеку openssl для шифрования DES. Как использовать ключи с длиной в 16 байт.C++ Des encryption с ключом 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; 
} 
+0

Будьте осторожны, у вас есть утечка памяти в коде, который вы показываете. Где вы освобождаете память, которую вы выделяете в функции 'Encrypt'? –

+0

Принимает ли AES 16-байтовый ключ? –

+0

AES позволяет использовать 128, 192 и 256 бит ключей. – zaph

ответ

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

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

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

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

+0

Согласен - DES больше не должен использоваться, он может быть разорван часами мотивированным злоумышленником. – EJoshuaS

+0

Хорошо, я буду использовать AES-128, спасибо. –

Смежные вопросы