aes加密
场景:AES加密范例
AES加密实例
AES加密实例
接上篇,这次写个AES加密的实例,作为DES加密的替代者,它更加安全,使用也较为广泛。
AES加密工具类:
package com.royboy.encrypt; import java.security.Key; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; public class AESEncrypt { /** *密钥算法 */ private static final String KEY_ALGORITHM = "AES"; /** * 加密、解密算法/工作模式/填充方式 */ private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding"; /** * 得到密钥 * @return */ public static byte[] initKey() throws Exception{ //实例化密钥生成器 KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM); /* * 初始化 * 如需要256位的密钥需要无政策限制权限文件或者用Bouncy Castle提供的算法 * */ kg.init(128); //生成密钥 SecretKey secretKey = kg.generateKey(); //获得二进制编码的密钥 return secretKey.getEncoded(); } /** * 封装密钥 * @param key 二进制密钥 * @return */ private static Key decorateKey(byte[] key){ //实例化密钥材料 SecretKey secretKey = new SecretKeySpec(key,KEY_ALGORITHM); return secretKey; } /** * 加密数据 * @param data 加密前的数据 * @param key 密钥 * @return 加密后的数据 */ public static byte[] encryptData(byte[] data,byte[] key) throws Exception{ Key k = decorateKey(key); //实例化 Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); //实始化,设置为加密模式 cipher.init(Cipher.ENCRYPT_MODE, k); return cipher.doFinal(data); } /** * 解密数据 * @param data 加密的数据 * @param key 密钥 * @return 解密后的数据 */ public static byte[] decryptData(byte[] data,byte[] key) throws Exception{ Key k = decorateKey(key); Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); //实始化,设置为解密模式 cipher.init(Cipher.DECRYPT_MODE, k); return cipher.doFinal(data); } }
AES加密测试类:
package com.royboy.encrypt; import org.junit.Test; import static org.junit.Assert.*; import com.sun.org.apache.xml.internal.security.utils.Base64; public class AESTester { /** * AES数据加/解密测试 * @throws Exception */ @Test public final void test() throws Exception{ String primevalData = "《孙子兵法》 《春秋战国》"; byte[] data = primevalData.getBytes(); System.out.println("原始内容:"+primevalData); //得到密钥 byte[] key = AESEncrypt.initKey(); System.out.println("加密密钥:"+Base64.encode(key)); byte[] encrypt = AESEncrypt.encryptData(data, key); System.out.println("加密数据:"+Base64.encode(encrypt)); byte[] decrypt = AESEncrypt.decryptData(encrypt, key); String decryptStr = new String(decrypt); System.out.println("解密数据:"+decryptStr); assertEquals(primevalData,decryptStr); } }