当前位置: 首页 > ops >正文

Gmssl库的aes算法效率问题

aes的算法效率问题总结

GmSSL 本身是基于 OpenSSL 的一个国密改造版,但它并不是 OpenSSL 的完整克隆,而是有以下几个特点,正是这些导致了它 “比 OpenSSL 慢” 的根本原因:


🚧 GmSSL 为什么比 OpenSSL 慢?

🧱 1. GmSSL 移除了硬件加速相关代码

  • GmSSL 项目主打国密算法(如 SM2、SM3、SM4 等),为简化结构或规避某些合规风险,有意移除了与 Intel AES-NI、ARM Crypto Extensions 等相关的硬件加速指令代码。

  • 所以哪怕你的 CPU 支持 aes 指令集,GmSSL 也不会调用硬件加速逻辑,而是回退到纯 C 实现。

📌 这与 OpenSSL 完全不同:OpenSSL 会根据 CPU 特性启用如 aesni-x86_64.asmvpaes 等汇编优化模块,极大提升性能。


🔄 2. 缺少平台优化汇编

  • GmSSL 移除了大量 OpenSSL 中用于 x86_64 和 ARM 的手写汇编优化代码,例如:

    • aesni-x86_64.s

    • aes_core.c 中与平台高度相关的代码段

  • 这意味着 AES 加解密在 GmSSL 中走的只是一个最基本的 C 语言参考实现。


🧪 3. 主要开发目标不是 AES,而是国密算法

  • GmSSL 的目标用户是对国密(SM 系列)算法有需求的单位或个人。

  • AES 在 GmSSL 中是“兼容保留”的,更多是为了兼容 OpenSSL 接口或做国密混合应用,不是性能优化重点。

解决方法建议

✔️ 方案一:混用 OpenSSL 和 GmSSL

  • 使用 OpenSSL 执行高性能 AES 加解密。

  • 使用 GmSSL 执行 SM2/SM4 等国密操作。

(两者 API 接口类似,代码切换成本不高。)


✔️ 方案二:在 GmSSL 中补回 AES-NI 支持

  • 如果愿意折腾,可以从 OpenSSL 中复制 aesni.cvpaes 等文件,按平台条件重新集成回 GmSSL。

  • 然后用 -maes 编译并手动链接。

⚠️ 但这会引入一些“非国密合规”模块,可能违背使用 GmSSL 的初衷。

好吧,用屁股想了一下,决定使用方案一!~操作之前如果有xp需求,请看一下末尾,免得白费力气

具体操作

先封装一下aes的ctr模式用法

gmssl_use.h

#ifndef _GMSSL_USE_H_
#define _GMSSL_USE_H_#include <stddef.h>
#include "ztype.h"#include <openssl/aes.h>
#include <openssl/evp.h>
#include <openssl/rand.h>typedef enum AES_
http://www.xdnf.cn/news/5656.html

相关文章:

  • 家具制造行业的现状 质检LIMS如何赋能家具制造企业质检升级
  • 见多识广7:KAIST(韩国高等科学技术院)——关注AI加速器方向
  • 复盘与导出工具最新版V23.0版本更新--新增韭菜异动轮动功能
  • 基于 Python 的后端开发学习路线
  • 【AI】mcp server是什么玩意儿
  • 【Linux网络】 HTTP cookie与session
  • DeepPrep:深度学习提升神经影像预处理
  • LeetCode算法题:电话号码的字母组合
  • Bodhi linux 系统详解
  • 分析红黑树工程实用的特点
  • 智能手表测试计划文档(软/硬件)
  • 读取.ini后缀类型的马达配置文件并进行赋值
  • AtCoder Beginner Contest 405(ABCD)
  • 搭建高可用及负载均衡的Redis
  • C++四种类型转换:static_cast、 dynamic_cast const cast、 reinterpret_cast
  • 详解RabbitMQ工作模式之通配符模式
  • 3.9/Q2,GBD数据库最新文章解读
  • 珠海金山2007逆向分析挑战赛-CrackMe看雪(九连环)(writeup)
  • 【运维】MacOS蓝牙故障排查与修复指南
  • 大地网接地电阻测试的必要性
  • Python如何使用进行风险管理和投资组合优化
  • 2025智能体基建在进化过程中带来的质变
  • 国外付费AI软件充值教程
  • 《棒球百科》MLB棒球公益课·棒球1号位
  • 02.Golang 切片(slice)源码分析(一、定义与基础操作实现)
  • VBA —— 学习Day6
  • 解读RTOS:第一篇 · RTOS 基础与选型指南
  • WebSocket的原理及QT示例
  • PHP 连接和使用 Kafka 的指南
  • 使用SSH协议克隆详细步骤