我正在嘗試使用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));
非常感謝。
謝謝你的解釋:) –