密码库LibTomCrypt学习记录——(1.4)分组密码算法——AES-NI指令与AES的速度

2023-10-28 18:48

本文主要是介绍密码库LibTomCrypt学习记录——(1.4)分组密码算法——AES-NI指令与AES的速度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

英特尔在比较新的CPU上提供了AES-NI指令,可以直接调用这些指令来进行AES加解密。关于此指令的速度提升情况,各方反应不一,最高有说提高17倍的,有说提高8-9倍左右的,还有说提高一半左右的。这可能和各人的测试平台和倾向都不一样,因此结果各有差别。

     CPU是否支持AES-NI可以使用英特尔AES-NI白皮书中的函数检测。白皮书中所述检测为:

checking CPUID.01H:ECX.AES[bit 25] = 1.

代码如下

#define cpuid(func,ax,bx,cx,dx)\

__asm__ __volatile__ ("cpuid":\

"=a" (ax), "=b" (bx), "=c" (cx), "=d" (dx) : "a" (func));

int Check_CPU_support_AES()

{

unsigned int a,b,c,d;

cpuid(1, a,b,c,d);

return (c & 0x2000000);

}

     微软VS2010以上版本(含)支持调用AES-NI。

  1. AES速度

     测试了LibTomCrypt、rijndael-alg-fst.c、OpenSSL的AES速度,测试平台为:

操作系统: Windows XP Professional (SP2) (32位)

处理器: 英特尔 Core 2 Duo E8400 @ 3.00GHz

内存: 2 GB ( DDR2 800MHz )

编译:VC++6.0

以下测试结果都采用不解绕(UNROLL)。在此测试环境中,解绕和不解绕的速度相差非常小,几乎可以忽略不计。

测试结果如下:(简记LibTomCrypt为Tom,简记rijndael-alg-fst.c为Fast,简记OpenSSL为SSL)

Debug

Release

Tom

Fast

SSL

Tom

Fast

SSL

Encrypt16

524.893

102.981

480.003

606.912

1109.189

1218.544

Decrypt16

529.611

102.353

479.799

593.443

908.381

1225.411

Encrypt24

469.653

99.387

436.004

525.932

943.827

1044.971

Decrypt24

464.927

99.823

431.03

529.255

774.287

1035.197

Encrypt32

429.025

98.474

398.485

469.170

822.720

913.642

Decrypt32

421.533

97.850

393.3

465.620

665.822

921.721

各版本的AES速度对比表(单位:Mbps)

各版本的AES速度对比图

相信AES-NI的速度会应该能提升好几倍,达到XGbps应该问题不大。

这篇关于密码库LibTomCrypt学习记录——(1.4)分组密码算法——AES-NI指令与AES的速度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/295209

相关文章

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

PostgreSQL数据库密码被遗忘时的操作步骤

《PostgreSQL数据库密码被遗忘时的操作步骤》密码遗忘是常见的用户问题,因此提供一种安全的遗忘密码找回机制是十分必要的,:本文主要介绍PostgreSQL数据库密码被遗忘时的操作步骤的相关资... 目录前言一、背景知识二、Windows环境下的解决步骤1. 找到PostgreSQL安装目录2. 修改p

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python包管理工具核心指令uvx举例详细解析

《Python包管理工具核心指令uvx举例详细解析》:本文主要介绍Python包管理工具核心指令uvx的相关资料,uvx是uv工具链中用于临时运行Python命令行工具的高效执行器,依托Rust实... 目录一、uvx 的定位与核心功能二、uvx 的典型应用场景三、uvx 与传统工具对比四、uvx 的技术实

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和