Однако после недавнего изменения я могу читать только незашифрованную часть данных (первую часть). байт полезной нагрузки, который определяет длину пакета). Остальная часть полезных данных остается зашифрованной. При попытке расшифровать пакет с помощью EVP_DecryptUpdate зашифрованный и расшифрованный буферы кажутся идентичными, а сопоставление со структурой приводит к появлению мусорных значений.
Для этой реализации мы используем C++. Будем очень признательны за любые предложения по решению этой проблемы.
Ниже приведен код расшифровки OpenSSL, используемый в проекте.
Код: Выделить всё
EVP_CIPHER_CTX *decrypt_ctx;
void handleErrors()
{
printf("ENC-DEC error");
ERR_print_errors_fp(stderr);
abort();
}
void decrypt_EVP_aes_256_gcm_init(EVP_CIPHER_CTX **ctx, unsigned char *key, unsigned char *iv)
{
if (!(*ctx = EVP_CIPHER_CTX_new()))
handleErrors();
if (1 != EVP_DecryptInit_ex(*ctx, EVP_aes_256_gcm(), NULL, key, iv))
handleErrors();
}
int decrypt(EVP_CIPHER_CTX *ctx, unsigned char *ciphertext, int ciphertext_len, unsigned char *plaintext, int *plaintext_len)
{
int len;
int ErrorCode = EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len);
if (1 != ErrorCode)
handleErrors();
*plaintext_len = len;
return ErrorCode;
}
Код: Выделить всё
struct bpf_program filter;
std::string filter_exp = "ip and tcp"; // Filter expression
if (pcap_compile(descr, &filter, filter_exp.c_str(), 0, PCAP_NETMASK_UNKNOWN) == -1)
{
std::cerr
Подробнее здесь: [url]https://stackoverflow.com/questions/78351335/issue-with-decrypting-packets-from-pcap-file-in-c[/url]
Мобильная версия