2016-08-04 13 views
2

16バイトキーで動的長さのテキストをDESで暗号化しようとしていますが、キーとテキストのブロックサイズに問題があります。私は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を使用します。ありがとうございます。 –