前端vue CryptoJS Aes CBC加密后端java解不出来而且key,iv不变 加密结果每次都不一样,求解
AES加密、AES解密 - 在线免费AES加解密 - 极捷工具在这个网站进行CBC下任意模式加密 用java解出来就行要有key,iv
前端vue CryptoJS Aes CBC加密后端java解密
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
22条回答 默认 最新
- 阿里嘎多学长 2024-11-09 17:14关注
阿里嘎多学长整理、AIGC生成:
Solution
您的问题涉及到 Front-end 使用 CryptoJS 对数据进行 AES 加密,然后在 Back-end 使用 Java 进行解密的问题。问题出现的原因是 CryptoJS 的 AES 加密使用 CBC 模式,默认值是 PKCS7 填充,而 Java 的 AES 加密使用 PKCS5 填充导致解密失败。
解决方案是:
- 在前端使用 CryptoJS 设置填充方式为 PKCS5:
const cipher = cryptojs.algo.AES.createCipher('aes-128-cbc', 'your_key', 'your_iv'); cipher.setAutoPadding(false);
- 在后端使用 Java 的 Cipher 对象设置填充方式为 PKCS5:
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec("your_key".getBytes(), "AES"), new IvParameterSpec("your_iv".getBytes()));
这样,在前端和后端使用相同的密钥和초 IV 则可以实现加密和解密。
Code
Front-end:
const cryptojs = require('crypto-js'); const key = 'your_key'; const iv = 'your_iv'; const data = '数据'; const cipher = cryptojs.algo.AES.createCipher('aes-128-cbc', key, iv); cipher.setAutoPadding(false); const encrypted = cipher.update(data, 'utf8', 'hex') + cipher.final('hex'); console.log(encrypted);
Back-end:
import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.IvParameterSpec; import java.util.Base64; public class Main { public static void main(String[] args) throws Exception { String key = "your_key"; String iv = "your_iv"; String data = "数据"; String encrypted = Base64.getEncoder().encodeToString(crypto(data, key, iv)); System.out.println(encrypted); } public static String crypto(String data, String key, String iv) throws Exception { Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes(), "AES"), new IvParameterSpec(iv.getBytes())); byte[] byteData = data.getBytes(); byte[] encrypted = cipher.doFinal(byteData); return Base64.getEncoder().encodeToString(encrypted); } }
Reference
- CryptoJS:CryptoJS - aes加密
- Java Cipher:Java - java.security.cipher
解决 无用评论 打赏 举报
悬赏问题
- ¥15 ansys fluent计算闪退
- ¥15 有关wireshark抓包的问题
- ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
- ¥15 向数据表用newid方式插入GUID问题
- ¥15 multisim电路设计
- ¥20 用keil,写代码解决两个问题,用库函数
- ¥50 ID中开关量采样信号通道、以及程序流程的设计
- ¥15 U-Mamba/nnunetv2固定随机数种子
- ¥15 vba使用jmail发送邮件正文里面怎么加图片
- ¥15 vb6.0如何向数据库中添加自动生成的字段数据。