gpt4 book ai didi

c - OpenSSL AES_cbc_encrypt 与 EVP 接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:09 26 4
gpt4 key购买 nike

我需要使用 AES-CBC 加密长期存在的网络数据流。我在想我会调用EVP_EncryptInit_ex()只需一次并保存 E VP_CIPHER_CTX用于后续调用 EVP_EncryptUpdate .然后在解密端做同样的事情。我发现的第一个问题是 EVP_DecryptUpdate 总是落后一个 block 。例如,如果我加密 32 个字节,第一次解密更新将只返回 16,即使我知道它已经解密了所有 32 个字节。我想这意味着我需要调用 EVP_DecryptFinalEVP_DecryptUpdate 之后, 然后 EVP_EncryptInit_ex()在下次更新之前重置 iv。

第二个问题是我可能有许多 1000 个这样的流,并且我正在尝试最小化内存占用。 sizeof(EVP_CIPHER_CTX)只有 168 字节,但如果我在 1000 次调用 EVP_EncryptInit_ex() 之前和之后查询内存使用情况,看起来它为每个上下文额外分配了 412 个字节(这是在第一次调用后的 20K 之上)。

更正,我看到每个 CTX 有 412 个字节,而不是 168 + 412

AES_cbc_encrypt()界面看起来更适合我的需要。有一个固定的 260 字节 AES_KEY结构,加上我需要自己维护 16 字节的 IV。但是,据我了解,它没有使用 AES-NI Intel 硬件加速。 https://security.stackexchange.com/questions/35036/different-performance-of-openssl-speed-on-the-same-hardware-with-aes-256-evp-an有没有办法在 AEC_cbc_encrypt() 上启用 AES-NI?界面? EVP 的 2X 内存要求是否不仅是 API 的副作用,而且是提高速度所必需的?是否有使用 AES-NI 的 OpenSSL 的良好替代方案?

最佳答案

Is there a way to enable AES-NI on the AEC_cbc_encrypt() interface?

没有。 AES_encrypt 是一种纯软件实现。它永远不会使用硬件加速。

此外,OpenSSL 项目告诉您不要使用AES_encrypt 和 friend 。相反,他们告诉您使用 EVP_encrypt 和 friend 。


Is the 2X memory requirement of EVP not just a side effect of the API, but necessary to get the speed improvement?

这很难说,因为我从未分析过它。但这有什么关系呢?如果您需要执行 X,那么您在 OpenSSL 中实际上别无选择。此处,X 执行使用 EVP 接口(interface)进行身份验证的加密


Is there a good alternative to OpenSSL that uses AES-NI?

这很难说。也许您可以明确说明您的要求,然后在 Programmers Stack Exchange 上询问.这是提出高级设计问题的地方。

关于c - OpenSSL AES_cbc_encrypt 与 EVP 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31413441/

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