关于AES算法及JAVA中的实现
2014-09-04 22:19
513 查看
什么是AES
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。基本原理
AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。java中的AES
五种模式
ECB(电子密码本 (Electronic Code Book))CBC(密码块链接 (Cipher Block Chaining))
CFB(密码反馈方式 (Cipher Feedback Mode))
OFB(输出反馈方式 (Output Feedback Mode))
PCBC(填充密码块链接 (Propagating Cipher Block Chaining))
JCE中AES支持上述五种模式:CBC,CFB,ECB,OFB,PCBC
不支持“NONE”模式
不同模式的优缺点见 这里
深入到原理级的介绍见 这里
三种填充
支持三种填充:NoPadding,PKCS5Padding,ISO10126Padding不支持SSL3Padding
默认的模式和填充
不带模式和填充来获取AES算法的时候,其默认使用ECB/PKCS5Padding关于加密前后的长度
算法/模式/填充 16字节加密后数据长度 不满16字节加密后长度 AES/CBC/NoPadding 16 不支持 AES/CBC/PKCS5Padding 32 16 AES/CBC/ISO10126Padding 32 16 AES/CFB/NoPadding 16 原始数据长度 AES/CFB/PKCS5Padding 32 16 AES/CFB/ISO10126Padding 32 16 AES/ECB/NoPadding 16 不支持 AES/ECB/PKCS5Padding 32 16 AES/ECB/ISO10126Padding 32 16 AES/OFB/NoPadding 16 原始数据长度 AES/OFB/PKCS5Padding 32 16 AES/OFB/ISO10126Padding 32 16 AES/PCBC/NoPadding 16 不支持 AES/PCBC/PKCS5Padding 32 16 AES/PCBC/ISO10126Padding 32 16
可以看到,在原始数据长度为16的整数倍时,假如原始数据长度等于16n,则使用NoPadding时加密后数据长度等于16n,其它情况下加密数据长度等于16(n+1)。在不足16的整数倍的情况下,假如原始数据长度等于16n+m[其中m小于16],除了NoPadding填充之外的任何方式,加密数据长度都等于16*(n+1);NoPadding填充情况下,CBC、ECB和PCBC三种模式是不支持的,CFB、OFB两种模式下则加密数据长度等于原始数据长度。
摘自 这里
示例代码
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); Cipher cipher = Cipher.getInstance("AES"); //cipher.init(Cipher.DECRYPT_MODE, skeySpec); //解密模式 cipher.init(Cipher.ENCRYPT_MODE, skeySpec); //加密模式 cipher.doFinal(src);
详细请见 这里
相关文章推荐
- 关于“泊松分酒”的算法理解,实现遍历所有情况(JAVA)
- 【JAVA】常用加解密算法总结及JAVA实现【BASE64,MD5,SHA,DES,3DES,AES,RSA】
- 关于用java io实现文件压缩与解压(不涉及压缩算法)
- java实现AES加密和解密算法
- AES - 关于AES算法 JAVA同C++互解
- AES算法,DES算法,RSA算法JAVA实现
- java实现的AES秘钥生成算法示例
- 关于《射雕英雄传》的数学算法问题 JAVA实现
- 关于“三阶幻方”算法的Java实现
- AES算法加密java实现
- 关于烙饼排序问题的算法与Java实现
- 说说如何使用 Java 的原生方法实现 AES 算法
- 关于乘方的优化算法(java实现)
- eclipse JAVA实现AES的加密和解密算法
- 【Java】Java的AES的算法实现(增加解密算法,优化域算法)
- 关于AES算法 JAVA同C++互解(AES)
- AES基于java的算法的具体实现
- [JsonSchema] 关于接口测试 Json 格式比对核心算法实现 (Java 版)
- 图象细化算法实现的java applet源代码
- 中国农历算法java实现(转自Herong Yang)