gpt4 book ai didi

c - OpenSSL EVP_DecryptFinal_ex 在输出缓冲区末尾生成垃圾

转载 作者:行者123 更新时间:2023-11-30 17:30:12 25 4
gpt4 key购买 nike

我正在使用 openssl 函数解密一些数据,但解密的最终结果存在一些问题。

 EVP_DecryptInit_ex(ctx, EVP_aes_192_cbc(), NULL, myKey, myVector);

int iPos = 0;

EVP_DecryptUpdate(ctx, decryptedData, &outLength, cryptedData,216);

INFO_NET_HEADER * header = (INFO_NET_HEADER)decryptedData;
iPos += outLength;

//...

int nStreamLength = ((header->incoming_audio_len / 16 +1) *16) - 16; //adjusting the length to the block size, incoming_audio_len is a length of the plain audio stream non-crypted data

char *rest = malloc(nStreamLength+48);
char *decryptedStream = malloc(nStreamLength+48);
int size = receiveRemaining(nStreamLength,rest);
memcpy(decryptedStream,0,nStreamLength+48);

EVP_DecryptUpdate(ctx, decryptedStream, &outLength, rest,size);

EVP_DecryptFinal_ex(ctx, decryptedStream+outLength, &loutLength);

我正在分部分解密,首先我需要解密 200 个字节,因为它们包含我需要获取和接收此数据的一些名称和数据长度。前 200 个字节和其余数据均使用相同的 key 进行加密。然后我获取需要解密以接收完整流的数据量,我成功接收了这些数据,一切都很好,但在输出缓冲区中最后总是留下一些垃圾,例如“somedataend\x14\x14\” x14...”等,垃圾大小为 14 到 16 字节长度,这是 EVP openssl 函数的正常行为吗?

最佳答案

在示例代码中没有看到,但我假设您已放入 EVP_CIPHER_CTX_set_padding 来在解密“部分”时禁用填充。解密密文最后一部分时需要重新启用它,否则填充将保留。

另请注意,请注意最后返回的 &loutLength。删除填充后,明文中剩余的字节数将少于密文中包含的字节数。

关于c - OpenSSL EVP_DecryptFinal_ex 在输出缓冲区末尾生成垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25233992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com