AES对称加密util

发布时间:2017-3-25 5:55:03 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"AES对称加密util ",主要涉及到AES对称加密util 方面的内容,对于AES对称加密util 感兴趣的同学可以参考一下。

package cn.com.qmhd.oto.common;import java.security.Key;import java.security.NoSuchAlgorithmException;import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import com.alibaba.druid.util.HexBin;//import org.springframework.security.crypto.codec.Hex;/** * AES Coder<br/> * secret key length: 128bit, default: 128 bit<br/> * mode: ECB/CBC/PCBC/CTR/CTS/CFB/CFB8 to CFB128/OFB/OBF8 to OFB128<br/> * padding: Nopadding/PKCS5Padding/ISO10126Padding/ *  *  */public class AESUtil {	/**	 * 密钥算法	 */	private static final String KEY_ALGORITHM = "AES";	private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";	/**	 * 初始化密钥	 * 	 * @return byte[] 密钥	 * @throws Exception	 */	public static byte[] initSecretKey() {		// 返回生成指定算法的秘密密钥的 KeyGenerator 对象		KeyGenerator kg = null;		try {			kg = KeyGenerator.getInstance(KEY_ALGORITHM);		} catch (NoSuchAlgorithmException e) {			e.printStackTrace();			return new byte[0];		}		// 初始化此密钥生成器,使其具有确定的密钥大小		// AES 要求密钥长度为 128		kg.init(128);		// 生成一个密钥		SecretKey secretKey = kg.generateKey();		return secretKey.getEncoded();	}	/**	 * 转换密钥	 * 	 * @param key	 *            二进制密钥	 * @return 密钥	 */	private static Key toKey(byte[] key) {		// 生成密钥		return new SecretKeySpec(key, KEY_ALGORITHM);	}	/**	 * 加密	 * 	 * @param data	 *            待加密数据	 * @param key	 *            密钥	 * @return byte[] 加密数据	 * @throws Exception	 */	public static byte[] encrypt(byte[] data, Key key) throws Exception {		return encrypt(data, key, DEFAULT_CIPHER_ALGORITHM);	}	/**	 * 加密	 * 	 * @param data	 *            待加密数据	 * @param key	 *            二进制密钥	 * @return byte[] 加密数据	 * @throws Exception	 */	public static byte[] encrypt(byte[] data, byte[] key) throws Exception {		return encrypt(data, key, DEFAULT_CIPHER_ALGORITHM);	}	/**	 * 加密	 * 	 * @param data	 *            待加密数据	 * @param key	 *            二进制密钥	 * @param cipherAlgorithm	 *            加密算法/工作模式/填充方式	 * @return byte[] 加密数据	 * @throws Exception	 */	public static byte[] encrypt(byte[] data, byte[] key, String cipherAlgorithm) throws Exception {		// 还原密钥		Key k = toKey(key);		return encrypt(data, k, cipherAlgorithm);	}	/**	 * 加密	 * 	 * @param data	 *            待加密数据	 * @param key	 *            密钥	 * @param cipherAlgorithm	 *            加密算法/工作模式/填充方式	 * @return byte[] 加密数据	 * @throws Exception	 */	public static byte[] encrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception {		// 实例化		Cipher cipher = Cipher.getInstance(cipherAlgorithm);		// 使用密钥初始化,设置为加密模式		cipher.init(Cipher.ENCRYPT_MODE, key);		// 执行操作		return cipher.doFinal(data);	}	/**	 * 解密	 * 	 * @param data	 *            待解密数据	 * @param key	 *            二进制密钥	 * @return byte[] 解密数据	 * @throws Exception	 */	public static byte[] decrypt(byte[] data, byte[] key) throws Exception {		return decrypt(data, key, DEFAULT_CIPHER_ALGORITHM);	}	/**	 * 解密	 * 	 * @param data	 *            待解密数据	 * @param key	 *            密钥	 * @return byte[] 解密数据	 * @throws Exception	 */	public static byte[] decrypt(byte[] data, Key key) throws Exception {		return decrypt(data, key, DEFAULT_CIPHER_ALGORITHM);	}	/**	 * 解密	 * 	 * @param data	 *            待解密数据	 * @param key	 *            二进制密钥	 * @param cipherAlgorithm	 *            加密算法/工作模式/填充方式	 * @return byte[] 解密数据	 * @throws Exception	 */	public static byte[] decrypt(byte[] data, byte[] key, String cipherAlgorithm) throws Exception {		// 还原密钥		Key k = toKey(key);		return decrypt(data, k, cipherAlgorithm);	}	/**	 * 解密	 * 	 * @param data	 *            待解密数据	 * @param key	 *            密钥	 * @param cipherAlgorithm	 *            加密算法/工作模式/填充方式	 * @return byte[] 解密数据	 * @throws Exception	 */	public static byte[] decrypt(byte[] data, Key key, String cipherAlgorithm) throws Exception {		// 实例化		Cipher cipher = Cipher.getInstance(cipherAlgorithm);		// 使用密钥初始化,设置为解密模式		cipher.init(Cipher.DECRYPT_MODE, key);		// 执行操作		return cipher.doFinal(data);	}	private static String showByteArray(byte[] data) {		if (null == data) {			return null;		}		StringBuilder sb = new StringBuilder("{");		for (byte b : data) {			sb.append(b).append(",");		}		sb.deleteCharAt(sb.length() - 1);		sb.append("}");		return sb.toString();	}		public static byte[] stringToBytes(String s){		return HexBin.decode(s);	}		public static String bytesToString(byte[] key){		return HexBin.encode(key);	}	public static void main(String[] args) throws Exception {//		byte[] key = initSecretKey();		byte[] key = stringToBytes("7939a2d9c827f53718cc6543acc1e197");		System.out.println("key:" + showByteArray(key));		System.out.println("生成的key字符串:" + bytesToString(key));//		Key k = toKey(key);		String data = "52607";		System.out.println("加密前数据: string:" + data);		System.out.println("加密前数据: byte[]:" + showByteArray(data.getBytes()));		System.out.println();		byte[] encryptData = encrypt(data.getBytes(), key);		System.out.println("加密后数据: byte[]:" + showByteArray(encryptData));		// System.out.println("加密后数据: hexStr:"+Hex.encodeHexStr(encryptData));		System.out.println("加密后数据: hexStr:" + bytesToString(encryptData));		System.out.println();		byte[] decryptData = decrypt(encryptData, key);		System.out.println("解密后数据: byte[]:" + showByteArray(decryptData));		System.out.println("解密后数据: string:" + new String(decryptData));

上一篇:Leetcode: Sentence Screen Fitting
下一篇:为什么编程语言中日期能够实现加减法

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款