AES产生背景:

DES的安全性和应用前景受到挑战,因此需要设计一个高保密性能的、算法公开的、全球免费使用的分组密码算法,用于保护敏感信息,并希望以此新算法取代DES算法,称为新一代数据加密标准,取名为高级数据加密标准(AES)

AES算法并不是一个具体的算法,而是一个算法的标准,它的要求和评估准则:

1.AES基本要求:比DES快且比DES安全,分组长度为128比特,密钥长度为128/192/256。

2.安全性评估:算法输出的随机性好,抗密码分析能力强,并且有可靠的数学基础。

3.成本估计准则:许可成本低,在各种平台上的计算高效率和较小的内存空间需求。

4.算法和实现特性准则:灵活性、硬件和软件使用性、算法的简明性。具体体现为:算法处理的密钥和分组长度必须具备灵活的支持范围;算法在许多不同类型的环境下能够安全和有效地实现;可以作为序列密码、哈希算法实现;必须能够用软件和硬件两种方法实现,并且有利于有效的固件实现;算法设计相对简单。

1997年4月15日美国国家标准技术研究所发起征集AES算法的活动.并专门成立了AES工作组织,并在 1997年9月12日在联邦登记处公布了征集AES候选算法的通告。

2000年10月2日正式公布比利时Rijmen 和Daemen设计的Rijndael算成为AES算法。

Rijndael优点:

NIST发表了一篇长达116页的报含,总结了选择Rijndael为AES的理由:

无论使用反馈模式还无反馈模式,在广泛的计算环境的硬件和软件实现件能都始终有着优秀的表现;

它的密钥建立时间极短,且灵敏性良好;

极低的内存需求使它非常适合于在存储器受限的环境中使用;

运算易于抵抗强力和时间选择攻击;

算法的内部循环结构将会从指令级并行处理中获得潜在的益处。

加密的模型:

组合起来就是一个AES块

AES中块长度, 密钥长度和轮数关系

Nb、Nk:块长度(以word为单位,一个word 32位注意上面的图)

Nr:轮数

子密钥矩阵长度:Nb*(Nr+1)

加密的伪代码:

SubBytes步骤中有一个称为S-box的表:

根据计算的结果将结果替换成S-box中相应的的值,比如计算出{53},x=5,y=3,对应的是{ed},用{ed}替换{53}

ShiftRows:

MixColumns:

AddRoundKey:

对每一列进行和密钥对应列的异或运算

解密过程基本上相当于加密逆过程:

伪代码如下:

S-box相应变化:

本文只是对AES进行了简单的介绍,根据AES的详细介绍文件来编写的。水平有限,解释的不清楚。

如果想对AES有更系统详细的了解,建议阅读该文档http://files.cnblogs.com/files/13jhzeng/AnnouncingTheAES.pdf。

最后,附上java里使用AES的小例子:

public class EncryptAES {

    //KeyGenerator提供对称密钥生成器的功能,支持各种算法
private KeyGenerator keygen;
//SecretKey负责保存对称密钥
private SecretKey seckey;
//Cilher负责完成加密或解密工作
private Cipher c;
//该字节数组负责保存加密的结果
private byte[] cipherByte; public EncryptAES() throws NoSuchAlgorithmException,NoSuchPaddingException {
Security.addProvider(new com.sun.crypto.provider.SunJCE());
//实例化支持AES算法的密钥生成器
keygen = KeyGenerator.getInstance("AES");
//生成密钥
seckey = keygen.generateKey();
//生成Cipher对象,指定其支持AES算法
c = Cipher.getInstance("AES");
} /**
* 对字符串加密
*
* @param str
* @return
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
public byte[] Encrytor(String str) throws InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
// 根据密钥,对Cipher对象进行初始化,ENCRYPT_MODE表示加密模式
c.init(Cipher.ENCRYPT_MODE, seckey);
byte[] src = str.getBytes();
// 加密,结果保存进cipherByte
cipherByte = c.doFinal(src);
return cipherByte;
} /**
* 对字符串解密
*
* @param buff
* @return
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
* @throws BadPaddingException
*/
public byte[] Decryptor(byte[] buff) throws InvalidKeyException,
IllegalBlockSizeException, BadPaddingException {
// 根据密钥,对Cipher对象进行初始化,DECRYPT_MODE表示加密模式
c.init(Cipher.DECRYPT_MODE, seckey);
cipherByte = c.doFinal(buff);
return cipherByte;
} /**
* @param args
* @throws NoSuchPaddingException
* @throws NoSuchAlgorithmException
* @throws BadPaddingException
* @throws IllegalBlockSizeException
* @throws InvalidKeyException
*/
public static void main(String[] args) throws Exception {
EncryptAES de1 = new EncryptAES();
String msg ="Hi,13jhzeng";
byte[] encontent = de1.Encrytor(msg);
byte[] decontent = de1.Decryptor(encontent);
System.out.println("明文是:" + msg);
System.out.println("加密后:" + new String(encontent));
System.out.println("解密后:" + new String(decontent));
} }

对称密码-分组密码-AES的更多相关文章

  1. 分组密码(四)AES算法① — 密码学复习(七)

    介绍完S-PN型结构之后,下面介绍AES算法.由于内容比较多所以将其分为两篇来介绍,本篇主要讲AES的历史时间节点.产生背景.与DES的对比.算法框图(粗略)以及一些数学基础. 7.1 AES的历史时 ...

  2. 分组密码(五)AES算法② — 密码学复习(八)

    在上一篇简单复习了AES的历史时间节点.产生背景.与DES的对比.算法框图(粗略)以及一些数学基础,如果不记得的话点击这里回顾.下面将介绍AES算法的细节. 下面给出AES算法的流程,图片来源:密码算 ...

  3. 加密算法 DES 3DES RSA AES 简介

    数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为[密文],使其只能在输入相应的[密钥]之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人 ...

  4. 密码算法详解——AES

    0 AES简介 1997年1月2号,美国国家标准技术研究所宣布希望征集一个安全性能更高的加密算法(AES)[3],用以取代DES.我们知道DES的密钥长度是64 bits,但实际加解密中使用的有效长度 ...

  5. AES算法,DES算法,RSA算法JAVA实现

    1     AES算法 1.1    算法描述 1.1.1      设计思想 Rijndael密码的设计力求满足以下3条标准: ① 抵抗所有已知的攻击. ② 在多个平台上速度快,编码紧凑. ③ 设计 ...

  6. 加解密 3DES AES RSA 简介 示例 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. Atitit.加密算法 des  aes 各个语言不同的原理与解决方案java php c#

    Atitit.加密算法 des  aes 各个语言不同的原理与解决方案java php c# 1. 加密算法的参数::算法/模式/填充 1 2. 标准加密api使用流程1 2.1. Md5——16bi ...

  8. 【复习】密码算法——AES

    0 AES简介 1997年1月2号,美国国家标准技术研究所宣布希望征集一个安全性能更高的加密算法(AES)[3],用以取代DES.我们知道DES的密钥长度是64 bits,但实际加解密中使用的有效长度 ...

  9. 我的Android进阶之旅------>Android采用AES+RSA的加密机制对http请求进行加密

    前言 未加密的抓包截图 加密之后的抓包截图 基本需求及概念 AES算法 AES基本原理及算法流程 AES算法流程 RSA算法 RSA算法基本原理及流程 RSA算法实现流程 AES与RSA相结合数据加密 ...

随机推荐

  1. devexpress中gridcontrol头部添加垂直线(右边框)

    winform开发,用devexpress中的gridcontrol控件,头部默认是3D样式,当客户希望像内容一样扁平化显示且需要添加垂直线(右边框)时恶梦开始了..经过一阵摸索发现可以这样解决: 1 ...

  2. [每日一题] 11gOCP 1z0-053 :2013-10-9 backup with the KEEP option....................................33

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12517603 正确答案:AB 在Oracle 11g中,可以使用backup ….keep ...

  3. iOS 检测网络状态

    一般有两种方式,都是第三方的框架,轮子嘛,能用就先用着,后面再优化. 一:Reachability 1.首先在AppDelegate.h添加头文件"Reachability.h", ...

  4. RSA客户端js加密服务器C#解密(含源码)

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. spring问题org.springframework.beans.factory.CannotLoadBeanClassException

    1.看jdk是否配置正确 2.把MyEclipse里面的那个classes删除让他重新编译就没什么问题了,只要配置是对的 3.重新clean project

  6. 雄踞AppStore榜首的游戏<别踩到白块儿>源码分析和下载(一)

    AppStore和Android市场情况 莫名其妙爆红的游戏 真的莫名其妙,笔者下这个游戏两次.第一次在豌豆荚排行榜看到这款游戏,名字怪怪的,下载下来尝试一下,没认为有什么新颖的,还在思虑这是不是刷榜 ...

  7. PetShop 4.0学习笔记:消息队列MSMQ

    直到今天才知道,在我们每天都在用的Window系统里还有这么好用的一个编程组件:消息队列.它能够解决在大数据量交换的情况下的性能问题,特别是BS系统的数据库性能.而且它的异步处理方式能给程序员最大的便 ...

  8. Ubuntu Server 12.04 静态IP简洁配置

    PS:很长时间没使用Ubuntu了,刚才安装个Ubuntu Server 12.04做测试.Ubuntu的网络设置跟Redhat系是不一样的,配置IP时发现跟以前的Ubuntu桌面版本也有所不同,记录 ...

  9. paip. mysql如何临时 暂时 禁用 关闭 触发器

    paip. mysql如何临时 暂时 禁用 关闭 触发器 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn ...

  10. 在TextView使用部分颜色文字

    /** * change a part of string color. * * @param string * whole string. * @param subString * the sub ...