对称加密算法 - AES
2017-08-09 00:00
197 查看
1、概述
AES(The Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范。是DES算法的替代者。
AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。
2、实现
AES(The Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范。是DES算法的替代者。
AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据 的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。
2、实现
import java.io.IOException; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * 对称加密算法 AES */ public class AESCoder { public final static String KEY_ALGORITHM = "AES"; // 加密解密算法/工作模式/填充方式 public final static String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding"; /** * 获取 密钥 * @return * @throws Exception */ public static String initKey() throws Exception{ //实例化 KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM); //设置密钥长度为 128 或 192 或 256 kg.init(128); //生成密钥 SecretKey secretKey = kg.generateKey(); // 获取 密钥的 二进制编码形式 byte[] b = secretKey.getEncoded(); return new BASE64Encoder().encode(b); } /** * 密钥转换 * @param key * @return * @throws IOException */ public static Key toKey(String key) throws IOException{ byte[] k = new BASE64Decoder().decodeBuffer(key); //实例化 AES SecretKey secretKey = new SecretKeySpec(k, KEY_ALGORITHM); return secretKey; } /** * DES 加密 * @param data * @param key * @return */ public static String encrypt(byte[] data, String key) throws Exception{ // 还原 key Key k = toKey(key); //Cipher对象实际完成加密操作 - 填充方式 Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); //用密匙初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, k); //正式执行加密操作 byte[] bt = cipher.doFinal(data); return new BASE64Encoder().encode(bt); } /** * DES 解密 * @param encryStr * @param key * @return */ public static String decrypt(String encryStr, String key) throws Exception{ BASE64Decoder decoder = new BASE64Decoder(); byte[] encryArr = decoder.decodeBuffer(encryStr); // 还原 key Key k = toKey(key); // Cipher对象实际完成解密操作 Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); // 用密匙初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, k); // 真正开始解密操作 byte[] arr = cipher.doFinal(encryArr); return new String(arr, "utf-8"); } public static void main(String[] args) throws Exception { String key = initKey(); String source = "AES 加密测试"; System.out.println("生成的 key:" + key); String encryStr = encrypt(source.getBytes("utf-8"), key); System.out.println(source + "->加密后-> " + encryStr); String decryStr = decrypt(encryStr, key); System.out.println(encryStr + "->解密后-> " + decryStr); /***Console结果 * 生成的 key:EPyU8UwMv89YB6I4aYUnmg== AES 加密测试->加密后-> 3ny9oF+LtTxzhjM4wZiuMIkqKANkErKBaiGx9knO91Y= 3ny9oF+LtTxzhjM4wZiuMIkqKANkErKBaiGx9knO91Y=->解密后-> AES 加密测试 */ } }
相关文章推荐
- AES 对称加密算法 加密\解密实例
- 常用加密算法的Java实现总结(二) ——对称加密算法DES、3DES和AES
- 第八章 对称加密算法--AES
- Java加密技术(二)——对称加密算法DES&AES
- 对称加密算法AES
- JAVA的对称加密算法AES——加密和解密
- 对称加密算法AES------使用AES算法对文件进行加密/解密的操作(JAVA)
- 加密篇之一 - 对称加密算法 DES,AES,PBE
- Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES
- 对称加密算法AES
- Java 加密 AES 对称加密算法
- Java加密技术(二)——对称加密算法DES&AES
- Java加密技术(二)——对称加密算法DES&AES
- Java加密技术(二)——对称加密算法DES&AES
- JAVA的对称加密算法AES——加密和解密
- Java实现的对称加密算法AES定义与用法详解
- Java 加密 AES 对称加密算法
- 对称加密算法(3):AES
- Java加密技术(二)对称加密算法DES&AES
- Java 加密解密之对称加密算法AES