栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA 实现AES加密解密

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA 实现AES加密解密

AES加密模式有ECB,CBC,CTR等

AES填充模式有pkcs5padding, pkcs7padding, no padding等

AES数据块则有128位 192位 256位

AES加密密码,如果选择数据块128位,则要求密码长度为16,数据块192位则要求密码长度为24,数据块长度为256位,则要求密码长度为32

AES的偏移量和AES加密类似

AES输出则有base64和hex两种

AES字符集有gb2312,gbk,utf-8等

1 使用CBC+PKCS5Padding+base64+utf-8 做加密解密,代码如下

     
	public String encrypt(String content, String encodingFormat, String sKey, String ivParameter) {
		try {
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
			byte[] raw = sKey.getBytes();
			SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
			IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
			cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
			byte[] encrypted = cipher.doFinal(content.getBytes(encodingFormat));
			return base64Utils.encodebase64String(encrypted);
		}catch (Exception e){
			log.error("data {} encrypt on error {}",content,e);
		}
		return null;
	}

	
	public String decrypt(String content, String encodingFormat, String sKey, String ivParameter) {
		try {
			byte[] raw = sKey.getBytes("ASCII");
			SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
			Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
			IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
			cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);

			byte[] encrypted1 = base64Utils.decodebase64(content);
			byte[] original = cipher.doFinal(encrypted1);
			String originalString = new String(original, encodingFormat);
			return originalString;
		} catch (Exception ex) {
			log.error("data {} decrypt on error {}",content,e);
		}
		return null;
	}

2 使用CBC+no padding+hex+utf-8 做加密解密,代码如下

注意:此方式加密或者解密内容字节长度必须为16的整数倍,否则会报错

     
	public String encrypt(String content, String encodingFormat, String sKey, String ivParameter) {
		try {
			byte[] raw = sKey.getBytes();
			SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
			Cipher cipher = Cipher.getInstance("AES/CBC/nopadding");
			IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
			cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
			while (content.getBytes(encodingFormat).length % 16 != 0){
				content+=" ";
			}
			byte[] encrypted = cipher.doFinal(content.getBytes(encodingFormat));
			return Hex.encodeHexString(encrypted).toUpperCase(Locale.ROOT);
		}catch (Exception e){
			log.error("data {} decrtpy on error {}",content,e);
		}
		return null;
	}

	
	public String decrypt(String content, String encodingFormat, String sKey, String ivParameter) {
		try {
			byte[] raw = sKey.getBytes("ASCII");
			SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
			Cipher cipher = Cipher.getInstance("AES/CBC/nopadding");
			IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
			cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
			byte[] bytes = Hex.decodeHex(content);
			byte[] original = cipher.doFinal(bytes);
			String originalString = new String(original, encodingFormat);
			return originalString;
		} catch (Exception ex) {
			log.error("data {} decrtpy on error {}",content,ex);
		}
		return null;
	}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号