c - 支持 AES-NI 的 EVP 接口(interface)

标签 c encryption openssl evp-cipher

在 C/C++ 中使用 OpenSSL 加密库时,EVP 接口(interface)是否自动支持 AES-NI 硬件加速(假设处理器支持)?引用this ,看来命令行 OpenSSL 确实有支持。我想知道是否必须使用特定的函数调用才能利用此支持。

例如,如果我使用 EVP_EncryptInit_ex(ctx, type, imp, key, iv),这些参数是否必须指定 NI 加速? IE。 EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv) 会成功吗?

谢谢!

最佳答案

When using the OpenSSL crypto libraries in C/C++, does the EVP interface automatically support AES-NI

是的。 EVP_* 是确保使用 AES-NI(如果可用)的官方/支持方式。事实上,EVP 通常是访问硬件加速的唯一途径。

EVP_*也是获得其他硬件加速的唯一途径,比如在Skylark下使用Intel的ia32的SHA加速; ARM 的 Crypto 扩展在 ARMv8 中可用;以及 VIA 在其处理器上的 ia32 Padlock 扩展。

使用低级 AES 例程(如 AES_encryptAES_decrypt)是纯软件实现,它们永远不会使用像 AES-NI 这样的硬件加速。另请参阅 Henson 博士在 OpenSSL 邮件列表上的回复 Verify AES-NI use at runtime? .


相关问题是(1)如何判断是否使用了AES-NI; (2) 基准测试结果是什么。为此,请参阅 How can I check if OpenSSL is support/use the Intel AES-NI?

关于c - 支持 AES-NI 的 EVP 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24516976/

相关文章:

c - 无法从 C 中的 HTTP 请求获取路径和方法

c# - C++ RSA 使用 XML key 加密/解密

security - .pem 文件是否同时包含私钥和公钥?

c - 如何以编程方式获取 Linux 进程的堆栈起始地址和结束地址?

c - 输入大小未知

firebase - Firebase Functions 上传入和传出 API 端点的数据是否已加密?

c++ - AES CBC算法的实现

c - 如何获取所有 openssl 或 libcrypto 错误代码的列表

c - 使用mpi.h,如何使用mpi.h的MPI_Altoallv为每个处理器发送超过4个整数?

php - Laravel AES-256加密和MySQL