Java实现AES加解密
- 这篇文章主要介绍了使用Java实现加密之AES加解密,AES为最常见的对称加密算法,对称加密算法也就是加密和解密用相同的密钥,需要的朋友可以参考下
- 在Vue中,Vue加密:
- Java解密:
这篇文章主要介绍了使用Java实现加密之AES加解密,AES为最常见的对称加密算法,对称加密算法也就是加密和解密用相同的密钥,需要的朋友可以参考下
首先我们县大致了解一下加密算法,如下图参考:
然后我们来了解AES:
AES: 高级加密标准(Advanced Encryption Standard)是美国联邦政府采用的一种区块加密标准,是目前最流行的一种对称加密算法。
话不多说,我们来看看它是杂用的吧。
使用Java和Vue实现AES加密算法的传输信息完整代码示例。
在Vue中,Vue加密:
/**
* 工具类
*/
import Vue from 'vue'
import CryptoJS from 'crypto-js'
let keyStr = "*********123";//加密密钥
let ivStr = "*********456";//矢量
//加密
export function aes_encrypt(word){
var key = CryptoJS.enc.Utf8.parse(keyStr);
var iv = CryptoJS.enc.Utf8.parse(ivStr);
// var srcs = CryptoJS.enc.Utf8.parse(word);
var encrypted = CryptoJS.AES.encrypt(word, key, {
iv:iv,
mode:CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7});
return encrypted.toString();
}
//解密
export function aes_decrypt(word){
var key = CryptoJS.enc.Utf8.parse(keyStr);//
var iv = CryptoJS.enc.Utf8.parse(ivStr);
// const restoreBase64 = word.replace(/\-/g,'+').replace(/_/g,'/');
var restoreBase64=word.replace(/[\r\n]/g,'');
var decrypt = CryptoJS.AES.decrypt(restoreBase64, key, {
iv:iv,
mode:CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
Java解密:
package com.qiyuan.qyframe.base.util;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.Arrays;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.AlgorithmParameters;
import java.security.Key;
import java.security.Security;
/**
* @Author
* @Create 2023/7/10
*/
@Slf4j
public class AESUtil {
private static final String ALGORITHM = "AES/CBC/PKCS5Padding";
/**
* AES加密
*
* @param content 明文
* @param key 秘钥
* @return
* @throws Exception
*/
public static String encrypt(Object content, String key) throws Exception {
String s ="";
//判断content是否为字符串
if(content instanceof String){
s=content.toString();
}else {
s = JSONUtil.parse(content).toString();
}
// 将返回的加密过的 byte[] 转换成Base64编码字符串 !!!!很关键
return base64ToString(AES_ECB_Encrypt(s.getBytes(), key.getBytes()));
}
/**
* AES解密
*
* @param content Base64编码的密文
* @param key 秘钥
* @return
* @throws Exception
*/
public static Object decrypt(String content, String key,String iv) {
// stringToBase64() 将 Base64编码的字符串转换成 byte[] !!!与base64ToString()配套使用
try {
byte[] base64 = stringToBase64(content);
byte[] bytes = AES_ECB_Decrypt(base64, key.getBytes(),iv.getBytes());
String result = new String(bytes);
String s = result.replaceAll("\"", "");
//判断解密出来的数据是字符串还是json
if(s.startsWith("{") && s.endsWith("}")){
JSON parse = JSONUtil.parse(s);
return parse;
}else{
return s;
}
} catch (Exception e) {
log.info("AES解密出错!!!");
e.printStackTrace();
}
return null;
}
private static byte[] AES_ECB_Encrypt(byte[] content, byte[] keyBytes) {
try {
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding","BC");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal(content);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static byte[] AES_ECB_Decrypt(byte[] content, byte[] keyBytes,byte[] ivByte) {
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
Key sKeySpec = new SecretKeySpec(keyBytes, "AES");
cipher.init(Cipher.DECRYPT_MODE, sKeySpec, generateIV(ivByte));// 初始化
byte[] result = cipher.doFinal(content);
return result;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static AlgorithmParameters generateIV(byte[] iv) throws Exception {
AlgorithmParameters params = AlgorithmParameters.getInstance("AES");
params.init(new IvParameterSpec(iv));
return params;
}
/**
* 字符串装换成 Base64
*/
public static byte[] stringToBase64(String key) throws Exception {
return Base64.decodeBase64(key.getBytes());
}
/**
* Base64装换成字符串
*/
public static String base64ToString(byte[] key) throws Exception {
return new Base64().encodeToString(key);
}
}