我正在尝试使用openssl使用AES加密/解密邮件。 通过下面的研究来后: https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption http://www.itc.edu.kh/bib/ebook/storage/Network%20Security%20with%20OpenSSL.pdf(Chapater 6)加密/解密输出缓冲区大小和何时多次调用EVP_EncryptUpdate
我可以加密/解密成功。
我的情形是这样的:
- 加密:输入加密base64编码串=>解码:输入明文=>使用AES 256 CBC =>返回结果中编码与BASE64
- 解密加密BASE64 =>解密使用AES 256 CBC =>返回解密明文
但我有一些问题的:
如何分配加密的缓冲区大小:字符* OUT =(字符*)malloc的(inLength + EVP_MAX_BLOCK_LENGTH);这够了吗?我承认 ,我没有通过加密逻辑的细节,即使 我有一些概念。如果有人可以给我一个暗示大小为 的加密大小逻辑,我真的很感激。像base64数据到 数据比例是4:3。它有33%的开销。但对于加密,我不会 找到这种信息。
如何分配解密缓冲区大小:b64decodeLen =解密b64加密文本。它应该以原始的二进制加密的数据长度为 。 char * out =(char *)malloc(b64decodeLen + 1);
根据以上malloc的加密缓冲区大小。我认为 纯文本大小将小于二进制加密数据长度。 这是正确的吗?EVP_EncryptUpdate可以根据需要多次调用。什么时候打电话多次?在这种情况下,我们需要多次拨打电话? https://stackoverflow.com/questions/29016193/block-cipher-in-openssl-how-to-correct-crypt-and-decrypt-in-c
while(1){
EVP_EncryptUpdate(ctx, ciphertext + outlen_tot, &outlen, (unsigned char*)msg + outlen_tot, block_size);
outlen_tot += outlen;
if(msg_len - outlen_tot < block_size){
break;
}
}
在本例中,它为加密的BLOCK_SIZE。如果我把输入 字符串的长度,然后我不需要多次呼叫多次,即使每个 大消息?
EVP_EncryptUpdate(ctx, out, &out_len, inString, strlen(inString));
非常感谢。
谢谢你的解释:) –