C ++ Des加密,16字节密钥

时间:2016-08-04 15:59:37

标签: c++ des

我正在尝试在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;
}

1 个答案:

答案 0 :(得分:4)

  1. DES有一个8字节的56位密钥(LSB不用作密钥的一部分,用于奇偶校验)所以你不能使用16字节密钥(通常忽略奇偶校验)

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

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

  4. AES允许使用128,192和256位密钥。