AES加密算法

1、简介

高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法。对称加密算法也就是加密和解密用相同的密钥。
AES加密算法_第1张图片

对称加密算法

加密和解密用到的密钥是相同的,这种加密方式加密速度非常快,适合经常发送数据的场合。缺点是密钥的传输比较麻烦。

密钥K

用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。

AES加密函数

设AES加密函数为E,则 C = E(K, P),其中P为明文,K为密钥,C为密文。也就是说,把明文P和密钥K作为加密函数的参数输入,则加密函数E会输出密文C。

AES解密函数

设AES解密函数为D,则 P = D(K, C),其中C为密文,K为密钥,P为明文。也就是说,把密文C和密钥K作为解密函数的参数输入,则解密函数会输出明文P。

2、使用

AES加解工具包:

public class AESUtils {
	/**
	 * AES加密
	 * @param content 待加密的内容
	 * @param encryptKey 加密密钥
	 * @return 加密后的byte[]
	 */
	public static byte[] aesEncryptToBytes(String content, String encryptKey)
			throws Exception {
		SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
		secureRandom.setSeed(encryptKey.getBytes("UTF-8"));
		KeyGenerator kgen = KeyGenerator.getInstance("AES");
		kgen.init(128, secureRandom);

		Cipher cipher = Cipher.getInstance("AES");
		cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(kgen.generateKey()
				.getEncoded(), "AES"));

		return cipher.doFinal(content.getBytes("UTF-8"));
	}

	/**
	 * AES加密为base64字符串
	 * @param content待加密的内容
	 * @param encryptKey  加密密钥
	 * @return 加密后的base64字符串
	 */
	public static String aesEncrypt(String content, String encryptKey)
			throws Exception {
		return Base64
				.encodeBase64String(aesEncryptToBytes(content, encryptKey));
	}

	/**
	 * AES解密
	 * @param encryptBytes 待解密的byte[]
	 * @param decryptKey  解密密钥
	 * @return 解密后的字符串
	 */
	public static String aesDecryptByBytes(byte[] encryptBytes,
                                           String decryptKey) throws Exception {
		SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
		secureRandom.setSeed(decryptKey.getBytes("UTF-8"));
		KeyGenerator kgen = KeyGenerator.getInstance("AES");
		kgen.init(128, secureRandom);

		Cipher cipher = Cipher.getInstance("AES");
		cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(kgen.generateKey()
				.getEncoded(), "AES"));
		byte[] decryptBytes = cipher.doFinal(encryptBytes);

		return new String(decryptBytes);
	}

	/**
	 * 将base64字符串用AES解密
	 * @param encryptStr  待解密的base64字符串
	 * @param decryptKey 解密密钥
	 * @return 解密后的字符串
	 */
	public static String aesDecrypt(String encryptStr, String decryptKey)
			throws Exception {
		return StringUtils.isBlank(encryptStr) ? null : aesDecryptByBytes(
				Base64.decodeBase64(encryptStr), decryptKey);
	}
}

项目中使用

// 加密 密码+设备sn号
AESUtils.aesEncrypt(password,devSn);
//解密
AESUtils.aesDecrypt(form.getPassword(),form.getDevSn());

你可能感兴趣的:(信息安全)