Tôi đang sử dụng SSL mở trong chương trình của mình, để mã hóa và giải mã dữ liệu bằng cách sử dụng mật mã aes. Tại thời điểm này có một chút rò rỉ bộ nhớ, vì vậy tôi đang tìm cách sửa lỗi đó. Trong thói quen giải mã mã hóa của tôi, tôi có bối cảnh tự do như vậyCách chính xác để giải phóng/phân bổ bối cảnh trong OpenSSL
EVP_CIPHER_CTX_free(ctx);
Và tạo ra bởi:
EVP_CIPHER_CTX_new
Đây là trên trang wiki OpenSSL trong examples
Nhưng! Trên trang MAN, có một gợi ý cho việc sử dụng các hàm EVP_CIPHER_CTX_cleanup
và EVP_CIPHER_CTX_init
. Vì vậy, về cơ bản những gì nên được chính xác để sử dụng, là EVP_CIPHER_CTX_new
/EVP_CIPHER_CTX_free
bằng cách nào đó không được chấp nhận? Và có bất kỳ sự khác biệt lớn nào giữa EVP_CIPHER_CTX_new
/EVP_CIPHER_CTX_free
và EVP_CIPHER_CTX_init
/EVP_CIPHER_CTX_cleanup
không?
if(!(ctx = EVP_CIPHER_CTX_new())) return -1;
if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))
{
EVP_CIPHER_CTX_free(ctx);
return -1;
}
if(1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len))
{
EVP_CIPHER_CTX_free(ctx);
return -1;
}
ciphertext_len = len;
if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) { EVP_CIPHER_CTX_free(ctx); return -1; }
ciphertext_len += len;
EVP_CIPHER_CTX_free(ctx);
Đó là điều ngược lại tôi nghĩ. Trong thực tế openssl-1.1.0 làm cho EVP_CIPHER_CTX trở thành một dạng mờ, do đó, biểu mẫu đầu tiên ở trên là một lỗi biên dịch – pixelbeat
Câu trả lời này có chính xác ngược như đã nêu trong các câu trả lời khác. Vui lòng cập nhật hoặc hủy chấp nhận nó. – rdb