高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

   不同于它的前任标准DES,Rijndael使用的是代换-置换网络,而非Feistel架构。AES在软件硬件上都能快速地加解密,相对来说较易于实现,且只需要很少的存储器。作为一个新的加密标准,目前正被部署应用到更广大的范围。

之前项目老大问我:AES128和AES256主要区别和安全程度是多少?他们对于机器的消耗是怎样的?两者性能如何?实际开发如何选择?(下面是三位知乎同学回答的)

AES相比同类对称加密算法速度算是非常快,比如在有AES-NI的x86服务器至少能达到几百M/s的速度。安全性在可预见的未来是基本等同的,因为即使是128位也足够复杂无法被暴力破解。现在112位密码还在商业应用,而128位是112位的几万倍,所以在实务中用128位比较划算(稍节约资源)。

AES256比128大概需要多花40%的时间,用于多出的4轮round key生成以及对应的SPN操作。另外,产生256-bit的密钥可能也需要比128位密钥多些开销,不过这部分开销应该可以忽略。
安全程度自然是256比128安全,因为目前除了暴力破解,并没有十分有效的代数攻击方法。
针对具体的AES-256或AES-128的软/硬件实现有特定的攻击方式,不好一概而论。

AES128和AES256主要区别是密钥长度不同(分别是128bits,256bits)、加密处理轮数不同(分别是10轮,14轮),后者强度高于前者。当前AES是较为安全的公认的对称加密算法。
现代密码学分为对称加密与非对称加密(公钥加密),代表算法分别有DES(现在发展为3DES)、AES与RSA等。非对称加密算法的资源消耗大于对称加密。一般是进行混合加密处理,例如使用RSA进行密钥分发、协商,使用AES进行业务数据的加解密。

==================================================================================================================

一些关于一些加密解密对称非对称算法相关图片:

关于用AES128还是AES256算法,个人认为AES128已经足够用,当然AES256可以作为一个营销手段使用

一些参考文献:

http://crypto.stackexchange.com/questions/5118/is-aes-256-weaker-than-192-and-128-bit-versions
http://serverfault.com/questions/51895/are-128-and-256bit-aes-encryption-considered-weak
http://stackoverflow.com/questions/18847580/aes128-vs-aes256-using-bruteforce
http://stackoverflow.com/questions/19061658/how-to-switch-from-aes-256-to-aes-128
https://github.com/sibiantony/ssleuth/issues/15
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
http://ubuntuforums.org/showthread.php?t=1694923
http://en.wikipedia.org/wiki/AES_implementations

在实际开发中,如果希望进行AES256位的加密解密,
需要事先从Java官网下载 local_policy.jar与US_export_policy.jar
http://www.oracle.com/technetwork/java/embedded/embedded-se/downloads/jce-7-download-432124.html
替换%JAVA_HOME%/jre/lib/security的两个policy文件,
local_policy.jar与US_export_policy .jar。

AES128和AES256主要区别和安全程度是多少?他们对于机器的消耗是怎样的?两者性能如何?实际开发如何选择?的更多相关文章

  1. 使用bouncycastle进行DESede/DESeee/AES128/AES192/AES256的加解密

    前言 默认的jdk不支持DESeee的算法,本地化的JDK中配置有拦截规则,可以通过使用bouncycastle的jar包中的DESEngine类来进行DESeee算法的运算. DES的8字节加解密 ...

  2. jvm高级特性(6)(线程的种类,调度,状态,安全程度,实现安全的方法,同步种类,锁优化,锁种类)

    JVM高级特性与实践(十三):线程实现 与 Java线程调度 JVM高级特性与实践(十四):线程安全 与 锁优化 一. 线程的实现 线程其实是比进程更轻量级的调度执行单位. 线程的引入,可以把一个检查 ...

  3. Nginx反代服务器进阶学习最佳配置实践指南

    转载自:https://www.bilibili.com/read/cv16150010?spm_id_from=333.999.0.0 0x00 编译实践 描述:在企业线上生产环境中推荐进行Ngin ...

  4. Neutron 理解(10):虚拟专用网(VPN)虚拟化 [How Neutron implements VPN Virtualization]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  5. 配置https

    引子: 最近在一篇文章中了解到EFF(电子前哨基金会)为了推广https协议,成立了一个let'sencrypt项目,可以发放免费的证书,此证书可以被大多数主流浏览器所信任,这个邪恶的念头一爆发,就让 ...

  6. AFNetwork ATS 网络层改造

    最近一直做项目的ATS改造,期间遇到了种种问题,各种坑都记录下来, 比如iOS版本.afnetwork版本.证书(是否为自签证书).域名验证.TLS版本等等,我们项目更复杂,还使用了域名到IP映射的路 ...

  7. [DFNews] EnCase v7.08发布

    EnCase v7.08 近日正式发布,7.08增加了Evidence Processor Manager以及Evidence Processor,不仅可以在本地实现证据处理队列,也支持了通过网络进行 ...

  8. 在 Ubuntu 16.04 上安装 LEMP 环境之图文向导

    导读 LEMP 是个缩写,代表一组软件包(注解 ① L:Linux OS,E:Nginx 网络服务器,M:MySQL/MariaDB 数据库和 P:PHP 服务端动态编程语言),它被用来搭建动态的网络 ...

  9. OpenSSL命令---pkcs12

    用途: pkcs12文件工具,能生成和分析pkcs12文件.PKCS#12文件可以被用于多个项目,例如包含Netscape. MSIE 和 MS Outlook. 用法: openssl pkcs12 ...

随机推荐

  1. 解读Unity中的CG编写Shader系列八(多光源漫反射)

    转自http://www.itnose.net/detail/6117338.html 前文中完成最简单的漫反射shader只是单个光源下的漫反射,而往往场景中不仅仅只有一个光源,那么多个光源的情况下 ...

  2. iOS 目录的使用

    Table 1-1  Commonly used directories of an iOS app  Directory Description AppName.app This is the ap ...

  3. eclipse中手动导入DTD文件的方式

    DTD一般应用在应用程序中定义数据交换类型的文档,一般用在xml配置文件中,有些时候在eclipse中并不能加载一些提示,这个时候需要手动导入,导入方法如下: 1.首先根据声明的网址下载.dtd的文件 ...

  4. windows8 安装TortoiseSVN后的反应

    因为工作需要,昨天安装了TortoiseSVN 64位版,没有马上重启. 随后,IIS中打开页面后浏览器一片空白,没有网页,没有地址,什么都没有.这时还没想到可能是TortoiseSVN的问题.后来实 ...

  5. opencv-3.x.0-x86-mingw32-staticlib-gcc5.3.0-20160712.7z

    折腾了半天 用 cmake 3.5.0 + gcc5.3.0 编译 opencv3.x.0 静态库 opencv-3.0.0-x86-mingw32-staticlib-gcc5.3.0-201607 ...

  6. Class和ClassLoader的getResourceAsStream区别

    这两个方法还是略有区别的, 以前一直不加以区分,直到今天发现要写这样的代码的时候运行 错误, 才把这个问题澄清了一下. 基本上,两个都可以用于从 classpath 里面进行资源读取,  classp ...

  7. 监控Tomcat解决方案(监控应用服务器系列文章分享)

    使用JMX接口开发监控程序  ◆ 全部代码需要从零开始,代码量较大  ◆ 支持各不同版本比较麻烦,每个版本可能有差异  ◆ 可支配性强  ◆ 最重要的一个缺点是,配置比较麻烦 Tomcat激活JMX远 ...

  8. android中判断网络连接是否可用

    一.判断网络连接是否可用 public static boolean isNetworkAvailable(Context context) { ConnectivityManager cm = (C ...

  9. iOS 一个控件只能拥有一个父类

    不多说上图.多么惨痛的教训,一个子控件   只有最后的一个被addsubview才会生效.

  10. objective-c可变字典

     1 #pragma mark *****************************字典********************************  2 //        字典:通过ke ...