2016-08-04 173 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,謝謝。 –