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);
	}
}
 

 

你可能感兴趣的:(apache,算法,JUnit,Security,sun)