java使用AES方式对密码进行加解密前端也要同步对密码加解密传输并保证和后台的加解密是一致的代码怎么写?需要什么引用加解密返回结果都要是string
- 导入相关的包和类
需要导入以下包:
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
- 定义加密解密方法
public static String encrypt(String key, String initVector, String value) {
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
byte[] encrypted = cipher.doFinal(value.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public static String decrypt(String key, String initVector, String encrypted) {
try {
IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
byte[] original = cipher.doFinal(Base64.getDecoder().decode(encrypted));
return new String(original);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
- 调用加密解密方法
// 加密
String key = "1234567890123456";
String initVector = "RandomInitVector";
String password = "mypassword";
String encryptedPassword = encrypt(key, initVector, password);
// 解密
String decryptedPassword = decrypt(key, initVector, encryptedPassword);
在前端,可以使用Javascript的CryptoJS库来进行AES加密解密。具体用法可以参考官方文档:https://cryptojs.gitbook.io/docs/。需要注意的是,在前端和后台的加密解密过程中,需要保证使用的密钥、初始向量和加密算法都是一致的
原文地址: https://www.cveoy.top/t/topic/fEpT 著作权归作者所有。请勿转载和采集!