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

相关文章

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组

mysql重置root密码的完整步骤(适用于5.7和8.0)

《mysql重置root密码的完整步骤(适用于5.7和8.0)》:本文主要介绍mysql重置root密码的完整步骤,文中描述了如何停止MySQL服务、以管理员身份打开命令行、替换配置文件路径、修改... 目录第一步:先停止mysql服务,一定要停止!方式一:通过命令行关闭mysql服务方式二:通过服务项关闭