对称加密算法(3):AES
来源:互联网 发布:内网穿透软件 linux 编辑:程序博客网 时间:2024/06/14 23:12
一.AES:AES加密算法即密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 "Rhinedoll"。)
二.优缺点:AES在软件及硬件上都能快速地加解密,相对来说较易于实作,且只需要很少的存储器。
三.原理:AES算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES 使用几种不同的方法来执行排列和置换运算。AES是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。
四.实现方式(java):
注意!!!:如果是自定义的秘钥,必须指定秘钥的长度,DES,3DES,AES 都一样
/** * AES 生成秘钥 ,系统生成默认的秘钥,自定义长度 * @return * @throws Exception */public static byte [] JDK_AES_GetSecretKey() throws Exception{KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");keyGenerator.init(128); // new SecureRandom() 默认长度 Key secretKey = keyGenerator.generateKey();return secretKey.getEncoded();}/** * AES 生成秘钥 ,自定义的秘钥,生成默认的秘钥长度 * @param key * @return * @throws Exception */public static byte [] JDK_AES_GetSecretKey(String key) throws Exception{KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");keyGenerator.init(128,new SecureRandom(key.getBytes()));Key secretKey = keyGenerator.generateKey();return secretKey.getEncoded();}/** * 使用 AES 加密算法,对数据进行加密 * @param src * @param encryptKey * @return * @throws Exception */public static byte [] JDK_AES_Encrypt(String src,byte [] encryptKey) throws Exception{// 秘钥的转换 Key key = new SecretKeySpec(encryptKey, "AES");//数据加密Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key);byte [] result = cipher.doFinal(src.getBytes());return result;}/** * 使用 AES 加密算法,对数据进行解密 * @param encryptBytes * @param encryptKey * @return * @throws Exception */public static String JDK_AES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{//key 的转换 Key key = new SecretKeySpec(encryptKey, "AES");//解密Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, key);String result = new String(cipher.doFinal(encryptBytes));return result;}/** * jdk AES 生成秘钥 ,系统生成默认的秘钥,自定义长度 * @return * @throws Exception */public static byte [] BC_AES_GetSecretKey() throws Exception{Security.addProvider(new BouncyCastleProvider());KeyGenerator keyGenerator = KeyGenerator.getInstance("AES","BC");keyGenerator.init(128); // new SecureRandom() 默认长度 Key secretKey = keyGenerator.generateKey();return secretKey.getEncoded();}/** * bc AES 生成秘钥 ,自定义的秘钥,生成默认的秘钥长度 * @param key * @return * @throws Exception */public static byte [] BC_AES_GetSecretKey(String key) throws Exception{Security.addProvider(new BouncyCastleProvider());KeyGenerator keyGenerator = KeyGenerator.getInstance("AES","BC");keyGenerator.init(128,new SecureRandom(key.getBytes()));Key secretKey = keyGenerator.generateKey();return secretKey.getEncoded();}/** * bc 使用 AES 加密算法,对数据进行加密 * @param src * @param encryptKey * @return * @throws Exception */public static byte [] BC_AES_Encrypt(String src,byte [] encryptKey) throws Exception{// 秘钥的转换 Key key = new SecretKeySpec(encryptKey, "AES");//数据加密Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.ENCRYPT_MODE, key);byte [] result = cipher.doFinal(src.getBytes());return result;}/** * bc 使用 AES 加密算法,对数据进行解密 * @param encryptBytes * @param encryptKey * @return * @throws Exception */public static String BC_AES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{//key 的转换 Key key = new SecretKeySpec(encryptKey, "AES");//解密Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE, key);String result = new String(cipher.doFinal(encryptBytes));return result;}
阅读全文
0 0
- 对称加密算法(3):AES
- 对称加密算法DES、3DES和AES
- 对称加密算法DES、3DES和AES
- 对称加密算法DES、3DES和AES
- 对称加密算法DES、3DES和AES
- 对称加密算法-DES,3DES,AES
- AES对称加密算法原理
- AES对称加密算法原理
- AES对称加密算法原理
- AES对称加密算法原理
- Security > 对称加密算法AES
- 对称加密算法(AES)
- AES 对称加密算法
- AES对称加密算法
- 对称加密算法AES
- AES对称加密算法扫盲
- JAVA-对称加密算法AES
- Imooc_JAVA实现对称加密3-1 JAVA-对称加密算法AES
- 关于forName()、newInstance()、getMethod()、getClass()等区别的简略说明
- 石子合并问题汇总
- 剑指offer面试题18 树的子结构
- 单例-lintcode-c++
- 递归算法时间复杂度求解方法
- 对称加密算法(3):AES
- Android SystemProperties设置/取得系统属性的用法总结
- SQL多表连接查询(详细实例)
- Fatal error in launcher: Unable to create process using '"D:\pytghon2.7\python.exe" "D:\python2.7\S
- CentOS7.2部署ELK5.2.2(yum安装)
- 有关语音方面的深度学习资料合集
- 网站解析基本流程
- linux设备驱动开发详情-设备驱动概念、硬件基础
- [置顶] 展讯充电管理模块浅析(一)