AES 加密又称对称性加密,在开发中常用于对流数据对加密,尤其是流数据在网络传输过程中,担心被泄露,AES 加密被常用于这块的校验中。下面是 AES 加密的百度百科说明解释:
AES加密标准又称为高级加密标准 Rijndael 加密法,是美国国家标准技术研究所NIST旨在取代 DES 的 21 世纪的加密标准。AES 的基本要求是,采用对称分组密码体制,密钥长度可以为 128、192 或 256 位,分组长度 128 位,算法应易在各种硬件和软件上实现。1998 年 NIST 开始 AES 第一轮分析、测试和征集,共产生了 15 个候选算法。
1999 年 3 月完成了第二轮 AES2 的分析、测试。2000 年 10 月 2 日美国政府正式宣布选中比利时密码学家 Joan Daemen 和 Vincent Rijmen 提出的一种密码算法 Rijndael作为 AES 的加密算法。
AES 加密数据块和密钥长度可以是 128b、192b、256b 中的任意一个。AES 加密有很多轮的重复和变换。大致步骤如下:
①密钥扩展(Key Expansion)
②初始轮(InitialRound)
③重复轮(Rounds),每一重复轮又包括字节间减法运算(SubBytes)、行移位(ShiftRows)、列混合(MixColumns)、轮密钥加法运算(AddRoundKey) 等操作
④最终轮(Final Round),最终轮没有列混合操作(MixColumns)
接下来把 Android 的代码贴一下:
- 解密
public static byte[] decryptData(byte[] data, byte[] key, byte[] iv, String transformation) throws Exception {
if (data == null || data.length == 0
|| key == null || key.length < 16
|| iv == null || iv.length < 16
|| transformation == null || transformation.length() == 0) {
throw (new InvalidParameterException());
}
AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
SecretKeySpec newKey = new SecretKeySpec(key, "AES"