码迷,mamicode.com
首页 > 编程语言 > 详细

Java 加解密技术系列之 AES

时间:2015-03-20 18:39:20      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:加密   解密   技术   aes   




这篇文章继续介绍对称加密算法,至于今天的主角,不用说,也是个厉害的角色 — — AES。AES 的出现,就是为了来替代原先的 DES 标准。现在来说,AES 的用途还是非常广泛的。


概念


AES,全称为“Advanced Encryption Standard”,中文名“高级加密标准”,在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。AES 加密算法作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。AES 设计有三个密钥长度:128,192,256 位。相对而言,AES 的 128 密钥比 DES 的 56 密钥强了 1021 倍。

技术分享


原理


AES 加密算法主要包括三个方面:轮变化、圈数和密钥扩展。AES 是分组密钥,算法输入 128 位数据,密钥长度也是 128 位。用 Nr 表示对一个数据分组加密的轮数。每一轮都需要一个与输入分组具有相同长度的扩展密钥 Expandedkey(i) 的参与。由于外部输入的加密密钥 K 长度有限,所以在算法中要用一个密钥扩展程序 (Keyexpansion) 把外部密钥 K 扩展成更长的比特串,以生成各轮的加密和解密密钥。

技术分享

  • 圈变化

AES 每一个圈变换由以下三个层组成:

非线性层 — — 进行Subbyte变换;

线行混合层 — — 进行 ShiftRow 和 MixColumn 运算;
密钥加层 — — 进行 AddRoundKey 运算。

  • 轮变化

对不同的分组长度,其对应的轮变化次数是不同的。这里就不再多说,有需要的可以继续上网了解。

  • 密钥扩展

AES 算法利用外部输入密钥 K (密钥串的字数为Nk),通过密钥的扩展程序得到共计 4(Nr+1) 字的扩展密钥。它涉及如下三个模块:

① 位置变换 (rotword) — — 把一个 4 字节的序列 [A,B,C,D] 变化成 [B,C,D,A];

② S 盒变换 (subword) — — 对一个 4 字节进行 S 盒代替;

③ 变换 Rcon[i] — — Rcon[i] 表示 32 位比特字 [xi-1,00,00,00]。


应用


CCMP  是一种基于 AES 加密算法和 CCM 认证机制,可以大大提高无线网络的安全程度。

WPA(无线局域网受保护访问协议)是一种新型的无线安全技术,它是 IEEE802.11i 的一个子集,核心是 IEEE802.1x 和 TKIP,可用以下公式表示几者之间的关系:

WPA=802.1x+EPA+TKIP+MIC

其中 MIC(信息完整性检查码)是 CCMP 加密技术中的一个重要组成部分:

CCMP 首先用 CBC-MAC 数据源认证模式对消息中的明文头、明文头长度和负载计算出一个 MIC,然后使用计数模式对负载和 MIC 进行加密,产生 128 比特的密匙,其中计数模式的核心算法就是 AES 加密算法。


代码实现


AES 的代码实现,这里就不再提供了,可以参考DES 中的代码实现,只需要把 算法定义换成 AES 即可,而且,在 DES 的代码中也都有详细的说明,需要的可以跳过去参考一下。


结束语


说到对称加密,在开发中是经常用到的加密算法,主要是涉及到的一些敏感数据,比如,个人信息、家庭住址、手机号码、密保问题、密保答案等等。至于密码什么的,一般都不怎么用对称加密算法(当然也有用的),密码这一类的信息,可以考虑用单向加密算法,比如,MD5、或者 SHA 等,考虑到安全性,可以外加一点 salt,当然,这些在开发的时候就是需要考虑的事了,这里就不细说了。


Java 加解密技术系列之 AES

标签:加密   解密   技术   aes   

原文地址:http://blog.csdn.net/happylee6688/article/details/44458691

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!