密码库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

相关文章

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

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

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