解密AES字符串
Decrypt AES string
我正在使用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;
}
我的问题是:
加密的字符串长度等于解密的字符串长度?(在AES 128位)
如果f_len代表解密的字节量(如果我错了,请纠正我),为什么它小于实际数据被解密?
谢谢
aes-128是一个块密码。块大小为128位(16个字节)。因此,密文的长度始终是16个字节的倍数。因此,密文可以比明文大。
编辑:
答案:
- 不,加密的数据可以更大或相等。
- 错误,f_len确实代表了分解的字节量。
(p_len + f_len)
做到了。