我正在尝试使用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)
我可以成功加密/解密.
我的情景如下:
- 加密:输入纯文本=>使用aes加密256 cbc =>使用base64编码返回结果
- 解密:输入加密的base64编码的字符串=>解码base64 =>用aes解密256 cbc =>返回解密的纯文本
但我有一些问题:
如何分配加密缓冲区大小:char*out =(char*)malloc(inLength + EVP_MAX_BLOCK_LENGTH); 这够了吗?我承认即使我有一些概念,我也没有详细介绍加密逻辑.如果有人能给我一些加密大小逻辑的大小,我真的很感激.像base64数据与数据的比例是4:3.它有33%的开销.但对于加密,我找不到这种信息.
如何分配解密的缓冲区大小:b64decodeLen =解码b64加密文本.它应该是原始的二进制加密数据长度.char*out =(char*)malloc(b64decodeLen + 1);
根据上面的malloc加密缓冲区大小.我认为纯文本大小将小于二进制加密数据长度.这是正确的吗?如有必要,可以多次调用EVP_EncryptUpdate.什么时候打多次?在哪种情况下我们需要多次调用? /sf/ask/2031133541/
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;
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,它为block_size加密.如果我把输入字符串长度,那么即使每个大的消息,我也不需要多次调用?
EVP_EncryptUpdate(ctx, out, &out_len, inString, strlen(inString));
Run Code Online (Sandbox Code Playgroud)
非常感谢.
plaintext_size + (block_size - plaintext_size % block_size)。所以你的缓冲区应该足够了。在此处查看更多信息:https : //en.wikipedia.org/wiki/Padding_(cryptography)| 归档时间: |
|
| 查看次数: |
3013 次 |
| 最近记录: |