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. nyoj 678 最小K个数之和

    最小K个数之和 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 输入n个整数,输出其中最小的K个数之和.例如输入4,5,1,1,6,2,7,3,3这9个数字,当k=4 ...

  2. 三角形div的原理

    三角形div原理 首先我们写一个正常的方形div样式,但是我们把它的宽度和高度都设置为零,并且边框线设置的粗一点: { width:0px: height:0px; Border:20px solid ...

  3. JavaWeb国际化

    软件的国际化: 软件在不同的地方,适应不同的风格: 中国: 显示中文,以及服务符合中国习惯的文本字符串! 美国: 显示英文,以及服务符合他国习惯的文本字符串! 这种软件,就叫国际化的软件! 如何做到国 ...

  4. RHCA442学习笔记-Unit13网络性能调整

    UNIT 13 Essential Network Tuning 网络性能调整        目标:1. 应用队列技术最大化网络吞吐量            2. 调整TCP和non-TCP网络soc ...

  5. 整理 iOS 9 适配中出现的坑

    本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版,随着有用户陆续升级 ...

  6. java float、double精度研究(转)

    在java中运行一下代码System.out.println(2.00-1.10);输出的结果是:0.8999999999999999很奇怪,并不是我们想要的值0.9 再运行如下代码:System.o ...

  7. 有关Color和Drawable你所不知道的那些内容

    Android开发中,我们经常会用到Color或Drawable,有时他们是可以混用的,有时却有严格的区别. Drawable 体系结构 Drawable是可绘制物件的一般抽象.与View不同,Dra ...

  8. NIO学习:使用Channel、Buffer写入文件

    NIO的效率要高于标准IO,因为NIO将最耗时的IO操作(填充和提取缓冲区)转移会操作系统.NIO以块为单位传输数据,相比标准IO的以字节为单位效率要高很多. 通道和缓冲时NIO的核心对象,每个NIO ...

  9. merge into sql优化

    今天网友说他的merge into sql跑了15分钟了还没有跑出数据,问我能不能优化一下,我让他把sql和sql的执行计划发过来 merge into F_Sal_P_Camp_Samp_Cust_ ...

  10. TextView使用的方式

    第一种改变TextView的方式 //      TextView tv=new TextView(this);  //      tv.setText("Hello,Android&quo ...