对于intel的AES-NI新指令集,需要i5处理器及以上的相关硬件支持.在编译时,可能会出现

/usr/lib/gcc/x86_64-linux-gnu/4.8/include/wmmintrin.h:34:3: error: #error "AES/PCLMUL instructions not enabled"

很显然,可以通过查其头文件,定位到

#if !defined (__AES__) && !defined (__PCLMUL__)
# error "AES/PCLMUL instructions not enabled"
#else

那么,很明显是因为没有定义两个宏.问题正因找到了,怎么解决呢?

对于gcc/g++编译器,需要添加编译选项-maes和-mpclmul;

对于vs系列,根据microsoft官网介绍,最低版本要求为visual studio 2010及以上

而对于下列问题:

error: request for member ‘m128i_u64’ in ‘a’, which is of non-class type ‘__m128i {aka __vector(2) long long int}’
a.1] = 0x8899AABBCCDDEEFF;(其中__m128i a;)

主要是对于变量a,在vs2010中,存在结构体成员a.m128i_u64[0],a.m128i_u64[1],而对于gcc/g++,存在a[0],a[1].这一点需要注意的.

下面是几个问题,也许你在学习中会遇到,现总结如下:

1.如何判断当前系统是否支持aes-ni指令集?

方法一:

$ sort -u /proc/crypto | grep module

module : aesni_intel
module : aes_x86_64
module : arc4
module : crc32_pclmul
module : crct10dif_pclmul
module : ghash_clmulni_intel
module : kernel

方法二:对于这个方法,需要安装cpuid。

$ cpuid | grep -i aes

  AES instruction = true
AES instruction = true
AES instruction = true
AES instruction = true

附文:

查看cpu信息

$ cat /proc/cpuinfo

$ lscpu

方法三:intel官网说这种方法不太可靠

$ cat /proc/cpuinfo| grep aes
$
grep aes /proc/cpuinfo
flags: ***** aes *****

2.linux下openssl使用aes-ni与否,对数据处理的速度比较?

aes-ni demo

$ openssl speed -elapsed -evp aes-128-cbc
$ OPENSSL_ia32cap="~0x200000200000000" openssl speed -elapsed -evp aes-128-cbc

openssl支持aes-ni指令集,但并没有将其作为一个engine.因此,为了支持aes-ni指令集,在openssl中需要添加

-evp (“envelope”) mode模块.

3.#error "SSE4.1 instruction set not enabled"或者说如何添加SSE4.1指令集?

给gcc或者g++编译器添加flags: -march=native or -msse2 / -msse3 / -mssse3 / -msse4.1

注意:使用-march=native编译选项时,编译器会根据处理器选择最好的CPU架构和flags。或者对于distcc,直接食用-march=corei7 -mavx -mpclmul。

CFLAGS+=  -msse4.1

通过以上总结:
$ g++ -std=c++11 -maes -mpclmul -msse4.1 main.cpp -o main
$ g++ -Wall -std=c++11 -march=native main.cpp -o main 4.Debian/Ubuntu安装openssl及开发库
$ sudo apt-get install opensll
libssl-dev
在ubuntu14.0下libssl.so和libcrypto.so位于/lib/x86_64-linux-gnu,默认的linux共享库搜索路径为/lib和/usr/lib两个目录(不包含子目录),
若共享库不在这两个路径,不能自动连接到(最典型的就是/usr/local/lib)。
所以提供一种通用方法:修改系统文件/etc/ld.so.conf,添加路径,运行ldconfig命令。

AES-NI指令集的更多相关文章

  1. 【转帖】超能课堂(186) CPU中的那些指令集都有什么用?

    超能课堂(186)CPU中的那些指令集都有什么用? https://www.expreview.com/68615.html 不明觉厉 开始的地方 第一大类:基础运算类x86.x86-64及EM64T ...

  2. 详解 HTTPS 移动端对称加密套件优

    近几年,Google.Baidu.Facebook 等互联网巨头大力推行 HTTPS,国内外的大型互联网公司很多也都已启用全站 HTTPS. Google 也推出了针对移动端优化的新型加密套件 Cha ...

  3. Intrinsics头文件与SIMD指令集、Visual Studio版本对应表(转)

    File:Intrinsics头文件 描述:指令集描述VS:Visual Studio版本号VisualStudio:Visual Studio版本名 File 描述 VS VisualStudio ...

  4. 小票打印机指令集封装(支持EPSON指令)

    最近写了一些关于小票打印机的程序,不难,但是记录下来,作为足迹吧. 现在市场上的小票机基本都支持EPSON指令.指令集文档 对指令集进行了自己的封装,方便以后调用: package aheiziUti ...

  5. DES、RC4、AES等加密算法优势及应用

    [IT168 技术]1篇文章,1部小说被盗取,全靠维(si)权(bi)捍卫自己的原创权利.程序员捍卫自己珍贵的代码,全靠花式的加密算法.代码加密有多重要?程序员半年做出的产品,盗版者可能半天就能完全破 ...

  6. CPU指令集不同导致的core分析

    最近程序需要支持CGSL系统运行,测试中发现相同操作系统的两台机器,编译机运行正常,测试机coredump.core信息汇总如下,可以看出是由于测试机不支持编译后的指令导致的问题: Program t ...

  7. java util - MD5/AES/RSA快速调用工具

    测试代码 package cn.java.security; import java.security.Key; import java.util.Base64; import org.junit.A ...

  8. RSA与AES实现数据加密传输

    RSA.AES简介 RSA:非对称加密,需要提前生成两个密钥(一对的),通过其中一个密钥加密后的数据,只有另一个密钥能解密.通常这两个密钥中有一个会暴漏出来,即对外公开的,这个密钥称为“公钥”,反之另 ...

  9. 关于CryptoJS中md5加密以及aes加密的随笔

    最近项目中用到了各种加密,其中就包括从没有接触过得aes加密,因此从网上各种查,官方的一种说法: 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学 ...

随机推荐

  1. 第十一次ScrumMeeting博客

    第十一次ScrumMeeting博客 本次会议于11月29日(三)22时整在3公寓725房间召开,持续30分钟. 与会人员:刘畅.辛德泰张安澜.赵奕.方科栋. 1. 每个人的工作(有Issue的内容和 ...

  2. [zabbix] zabbix数据采集频率、数据连续多次异常触发、告警次数、告警频率

    数据采集频率:1分钟采集一次 数据连续多次异常触发:连续三次异常才触发告警 告警次数:告警三次 告警频率:每隔10分钟告警一次 默认模板“Template App Zabbix Agent”监控项“A ...

  3. Python之并发编程-IO模型

    目录 一.IO模型介绍二.阻塞IO(blocking IO)三.非阻塞IO(non-blocking IO)四.多路复用IO(IO multiplexing)五.异步IO(Asynchronous I ...

  4. CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法

    CocoaPods pod install的时候报错:invalid byte sequence in UTF-8 (ArgumentError)解决办法: 基本可以确定是Podfile中的内容编码有 ...

  5. Daily Scrum (2015/11/7)

    今晚谢金洛同学的UI工作完成,我们进行了UI和后端的拼接,准备开始规范化地进行系统测试. 成员 今日任务及成果 时间 明日任务 符美潇 1.把之前PM分配的编码任务及其说明准备好发给PM 1h 待定 ...

  6. 进阶系列(11)—— C#多线程

    一.多线程的相关概念 1.进程:是操作系统结构的基础:是一个正在执行的程序:计算机中正在运行的程序实例:可以分配给处理器并由处理器执行的一个实体:由单一顺序的执行显示,一个当前状态和一组相关的系统资源 ...

  7. Software Defined Networking(Week 2, part 3)

    Control of Packet-switch Network 我们已经讨论过中心控制网络的原理,但主要是以电话网络做模型的.现在我们来看看对于分组交换网络的控制是如何改进的. Why Separa ...

  8. ACM Shenyang Onsite 2016 题目

    A. Thickest Burger 1000ms 262144K   ACM ICPC is launching a thick burger. The thickness (or the heig ...

  9. sql中exists和not exists的用法

    该文转载自:http://www.cnblogs.com/mytechblog/articles/2105785.html sql中exists,not exists的用法 exists : 强调的是 ...

  10. TP5 助手函数与TP3.2单字母函数

    一.TP5 助手函数 助手函数 描述 abort 中断执行并发送HTTP状态码 action 调用控制器类的操作 cache 缓存管理 config 获取和设置配置参数 controller 实例化控 ...