对于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. python json模块使用详情

    python其他知识目录 #json.数据交换用到json文件.json是特殊的字符串.访问网站,返回的就是json 1.json简介: 定义:JSON(JavaScript Object Notat ...

  2. JS中判断对象是不是数组的方法

    JavaScript中检测对象的方法 1.typeof操作符 这种方法对于一些常用的类型来说那算是毫无压力,比如Function.String.Number.Undefined等,但是要是检测Arra ...

  3. 【Alpha】技术规格说明书

    由于第1周已经写过技术规格说明书(设计文档),本周更新了上一版内容. Github地址:https://github.com/buaase/Phylab-Web/blob/master/docs/Ba ...

  4. Go going软件NABCD

    N  (Need 需求):gogoing项目目前打算做得是一个基于石家庄铁道大学在校大学生对于短期节假日出行旅游的指南.次关键的定义为“简单”.“简单”则体现在我们的软件使用简单.方便,以及界面的简洁 ...

  5. HDU 3092 Least common multiple 01背包

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3092 Least common multiple Time Limit: 2000/1000 MS ...

  6. 讲讲Windows10(UWP)下的Binding

    前言 貌似最近来问我XAML这块的东西的人挺多的.有时候看他们写XAML这块觉着也挺吃力的,所谓基础不牢,地动山摇.XAML这块虽说和HTML一样属于标记语言,但是世界观相对更加庞大一点. 今天讲讲X ...

  7. 订制EditText光标

    订制EditText光标 设置背景android:background="@null" 设置光标样式:android:textCursorDrawable="@drawa ...

  8. jQuery之_事件绑定与解绑

    使用jQuery实现事件的绑定和解绑 就是所谓的事件操作. 1. 事件绑定(2种): * eventName(function(){}) 绑定对应事件名的监听, 例如:$('#div').click( ...

  9. [2017BUAA软工]第3次个人作业

    软工第3次个人作业--案例分析 一. 调研,评测 1.软件的bug(至少两个,不少于40字) 测试软件: 必应词典移动端 测试平台:iPhone 6 bug1 对于翻译功能中的图片翻译功能,必应词典是 ...

  10. express入门学习(一)

    一.安装express cnpm || npm  install express --save ; 1. Hello  World var express = require('express'); ...