前后端传数据时内容含有密码需要对密码进行加密传输前后端加解密代码该如何写前端使用vue后端使用的springboot
前端加密代码:
在前端使用AES加密算法对密码进行加密,使用Base64将加密结果转换为字符串格式,然后将加密后的字符串作为参数传给后端。
// 导入加密库
import CryptoJS from "crypto-js";
// 加密方法
const encrypt = (password) => {
// 加密密钥
const key = CryptoJS.enc.Utf8.parse("1234567890abcdef");
// 加密向量
const iv = CryptoJS.enc.Utf8.parse("abcdef1234567890");
// 加密方法
const encrypted = CryptoJS.AES.encrypt(password, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
});
// 返回Base64格式的加密结果
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
};
// 调用方法将明文密码加密后传给后端
const password = "123456";
const encryptedPassword = encrypt(password);
axios.post("/login", { password: encryptedPassword }).then((res) => {
console.log(res.data);
});
后端解密代码:
在后端使用AES解密算法对密码进行解密,使用Base64将前端传来的字符串格式的密文转换为二进制格式,然后将解密后的明文密码进行后续操作。
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESUtil {
/**
* 加密方法
* @param content 明文
* @param key 密钥
* @param iv 加密向量
* @return 加密结果
* @throws Exception 异常
*/
public static byte[] encrypt(byte[] content, byte[] key, byte[] iv) throws Exception {
// 创建AES加密算法实例
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// 创建密钥规则
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
// 加密向量
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
// 初始化加密算法
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
// 加密
byte[] encrypted = cipher.doFinal(content);
return encrypted;
}
/**
* 解密方法
* @param content 密文
* @param key 密钥
* @param iv 加密向量
* @return 解密结果
* @throws Exception 异常
*/
public static byte[] decrypt(byte[] content, byte[] key, byte[] iv) throws Exception {
// 创建AES解密算法实例
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// 创建密钥规则
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
// 加密向量
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv);
// 初始化解密算法
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
// 解密
byte[] decrypted = cipher.doFinal(content);
return decrypted;
}
/**
* 将Base64编码的字符串转换为二进制数据
* @param str Base64编码的字符串
* @return 二进制数据
*/
public static byte[] base64Decode(String str) {
return Base64.getDecoder().decode(str);
}
public static void main(String[] args) throws Exception {
// 密钥
String key = "1234567890abcdef";
// 加密向量
String iv = "abcdef1234567890";
// Base64编码的密文
String encryptedPassword = "3PpMnM0Jm4h1fSxkVZ2G9g==";
// 将密文转换为二进制数据
byte[] encryptedBytes = base64Decode(encryptedPassword);
// 解密
byte[] decryptedBytes = decrypt(encryptedBytes, key.getBytes(), iv.getBytes());
// 将解密后的二进制数据转换为字符串
String decryptedPassword = new String(decryptedBytes);
System.out.println(decryptedPassword);
}
}
``
原文地址: https://www.cveoy.top/t/topic/fEjk 著作权归作者所有。请勿转载和采集!