解密AES字符串

时间:2012-11-08 11:16:29

标签: c++ openssl aes

我正在使用openssl库来解密来自设备的一些原始字符串。

设备使用的加密是AES - 128位。

这是我的代码:

unsigned char *aes_decrypt(EVP_CIPHER_CTX *e, unsigned char *ciphertext, int *len)
{
  int p_len = *len, f_len = 0;
  unsigned char *plaintext = new unsigned char [p_len + 128];
  memset(plaintext,0,p_len + 128);
  syslog(LOG_NOTICE,"P_LEN BEFORE: %d",p_len);
  EVP_DecryptInit_ex(e, NULL, NULL, NULL, NULL);
  EVP_DecryptUpdate(e, plaintext, &p_len, ciphertext, *len);
  EVP_DecryptFinal_ex(e, plaintext+p_len, &f_len);

  syslog(LOG_NOTICE,"P_LEN : %d",p_len);
  syslog(LOG_NOTICE,"F_LEN : %d",f_len);
  *len = p_len + f_len;

  syslog(LOG_NOTICE,"MARIMEA ESTE %d",*len);
  return plaintext;
}

我的问题是:

  1. 加密字符串长度是否等于解密的字符串长度? (在AES 128位中)

  2. 如果f_len表示解密的字节数(如果我错了,请更正),为什么它比解密的实际数据小?

  3. 由于

1 个答案:

答案 0 :(得分:4)

AES-128是分组密码。块大小为128位(16字节)。因此,密文的长度始终是16个字节的倍数。所以密文可以比明文大。

修改

数目:

  1. 不,加密数据的长度可以更大或相等。
  2. 错误,f_len表示解密的字节数。 (p_len + f_len)做到了。