- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要使用 AES-CBC 加密长期存在的网络数据流。我在想我会调用EVP_EncryptInit_ex()
只需一次并保存 E VP_CIPHER_CTX
用于后续调用 EVP_EncryptUpdate
.然后在解密端做同样的事情。我发现的第一个问题是 EVP_DecryptUpdate 总是落后一个 block 。例如,如果我加密 32 个字节,第一次解密更新将只返回 16,即使我知道它已经解密了所有 32 个字节。我想这意味着我需要调用 EVP_DecryptFinal
每 EVP_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/
考虑以下 C++ 代码片段: #include #include #define AES_KEY_LENGTH 32 using namespace std; int main() { A
我正在尝试使用 openssl 库中的 AES_cbc_encrypt 函数加密和解密 keystore 。 我在内存分配方面遇到问题,如果有人能给我一些如何以正确的方式执行此操作的建议,那就太好了。
考虑以下 C++ 代码片段: #include #include #define AES_KEY_LENGTH 32 using namespace std; int main() { A
我正在尝试更详细地了解 OpenSSL 库。因此,我一直在尝试使用 AES_* 函数,而不是使用一组更高级别的 EVP 函数。按照 this question 中的一般调用集(虽然我使用的是 CBC
我需要使用 AES-CBC 加密长期存在的网络数据流。我在想我会调用EVP_EncryptInit_ex()只需一次并保存 E VP_CIPHER_CTX用于后续调用 EVP_EncryptUpdat
仍然发现很难在 C 中使用内存。我正在读取一个文本文件,其中我将包含名称和 40 个字符的随机字符串的每一行文本存储到 2 个缓冲区中,char buffer1[128] 和char buffer2[
我是一名优秀的程序员,十分优秀!