数据加密-对称加密AES

对称加密

对称加密算法又称传统加密算法。 加密和解密使用同一个密钥。

经典加密算法有三种:

  1. DES(Data Encryption Standard):数据加密标准(现在用的比较少,因为它的加密强度不够,能够暴力破解)
  2. 3DES:原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本)
  3. AES(Advanced Encryption Standard):高级加密标准,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。

加密模式

加密模式:
ECB:电子密码本,就是每个块都是独立加密
CBC:密码块链,使用一个密钥和一个初始化向量(IV)对数据执行加密转换

只要是对称加密都有 ECB和 CBC模式,加密模式是加密过程对独立数据块的处理。对于较长的明文进行加密需要进行分块加密,在实际开发中,推荐使用CBC的,ECB的要少用。

AES加解密示例

数据传输的加密使用对称加密算法AES128位加密,加密模式CBC,填充模式PKCS5Padding方式。

/**
 * 加密
 * 
 * @param sSrc  待加密数据
 * @param sKey  密钥(16位字符串)
 * @return
 * @throws Exception
 */
public static String encrypt(String sSrc, String sKey) throws Exception {
	if (sKey == null) {
		return null;
	}
	// 判断Key是否为16位
	if (sKey.length() != 16) {
		return null;
	}
	byte[] raw = sKey.getBytes();
	SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
	Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/补码方式"
	IvParameterSpec iv = new IvParameterSpec(sKey.getBytes());// 使用CBC模式,需要一个向量iv,可增加加密算法的强度
	cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
	byte[] encrypted = cipher.doFinal(sSrc.getBytes());
	return new Base64Encoder().encode(encrypted);// 此处使用BASE64做转码功能,同时能起到2次加密的作用。
}

/**
 * 解密
 * 
 * @param sSrc 密文
 * @param sKey 密钥(16位字符串)
 * @return
 * @throws Exception
 */
public static String decrypt(String sSrc, String sKey) throws Exception {
	try {
		if (sKey == null) {
			return null;
		}
		// 判断Key是否为16位
		if (sKey.length() != 16) {
			return null;
		}
		byte[] raw = sKey.getBytes("ASCII");
		SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
		Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
		IvParameterSpec iv = new IvParameterSpec(sKey.getBytes());
		cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
		byte[] encrypted1 = new Base64Decoder().decode(sSrc);// 先用base64解密
		try {
			byte[] original = cipher.doFinal(encrypted1);
			String originalString = new String(original);
			return originalString;
		} catch (Exception e) {
			System.out.println(e.toString());
			return null;
		}
	} catch (Exception ex) {
		System.out.println(ex.toString());
		return null;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值