2016-08-04 296 views
2

我想在DES中使用16字节的密钥加密动态长度的文本,但是存在与密钥和文本的块大小有关的问题,我使用的是openssl库用于DES加密。我如何使用长度为16个字节的密钥。使用16字节密钥的C++ DES加密

这里我举的例子:

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位密钥(LSB不作为关键的部分,它是用于奇偶校验),所以你不能使用一个16字节的密钥(通常忽略奇偶校验)。

  2. 不要使用DES,它不安全并已被AES取代。

  3. 不要使用ECB模式,这是不安全的,请参阅ECB mode,向下滚动到企鹅。

AES允许128位,192位和256位密钥。

+0

我同意 - 不应该再使用DES,它可以在几小时内被动机不良的攻击者破坏。 – EJoshuaS

+0

好吧,我会用AES-128,谢谢。 –