对于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. killall命令详解

    基础命令学习目录首页 原文链接:https://blog.csdn.net/tanga842428/article/details/52474250 Linux系统中的killall命令用于杀死指定名 ...

  2. Nginx中server_name 参数详解

    Nginx中的server_name指令主要用于配置基于名称的虚拟主机,server_name指令在接到请求后的匹配顺序分别为: 1.准确的server_name匹配,例如: server { lis ...

  3. 慢吞吞的pip切换源

    http://blog.csdn.net/gz_liuyun/article/details/52778198

  4. webpack入门指南-step04

    一.建立项目 建一个文件夹,然后新建一个package.json的文件在项目根目录下 如果你使用git管理你的这个项目的话,建议你新建一个.gitignore文件,不要让git提交一些node依赖的模 ...

  5. C++ 类 析构函数

    一.析构函数的定义 析构函数为成员函数的一种,名字与类名相同,在前面加‘~’没有参数和返回值在C++中“~”是位取反运算符.一个类最多只能有一个析构函数.析构函数不返回任何值,没有函数类型,也没有函数 ...

  6. maven 阿里仓库配置文件

    <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...

  7. GIT的使用及心得

    先给大家个很棒的GIT使用教程链接http://blog.jobbole.com/78960/ 这个链接是我在学习使用GIT时看的教程博客,分享给大家,里面还有介绍SVN与GIT的区别 GITHUB上 ...

  8. 【大数据应用技术】作业八|爬虫综合大作业Molly134

    本次作业的要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3075 前言:本次作业是爬取CBO中国票房2010-2019年每年 ...

  9. Alpha版本冲刺(六)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  10. 编写wordcount程序

    一.程序概述 1.此次编写的程序为邹欣老师<构建之法>科书2.4.2 wordcount程序. 2.我写的wordcount程序要实现的功能整体可以总结为: ① 统计word文档中的字符数 ...