前端vue CryptoJS Aes CBC加密后端java解不出来而且key,iv不变 加密结果每次都不一样,求解
AES加密、AES解密 - 在线免费AES加解密 - 极捷工具在这个网站进行CBC下任意模式加密 用java解出来就行要有key,iv
前端vue CryptoJS Aes CBC加密后端java解密
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
26条回答 默认 最新
- 阿里嘎多学长 2024-11-09 17:14关注
获得0.30元问题酬金 阿里嘎多学长整理、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 多尺度特征图提取和融合
- ¥15 微信小程序:渲染收货地址时页面不显示
- ¥20 win7 64位DirectShow提示初始化失败如何解决?
- ¥20 小规模孤立词识别系统设计
- ¥15 关于Java对接海康威视车牌识别一体机SDK是否需要固定外网的IP?
- ¥15 Linux扩容时,格式化卡住了:vgdispaly查看卷组信息,没有输出
- ¥18 关于#ubuntu#的问题:使用背景-工作职责内有七八台ubuntu系统的电脑,平时需要互相调取资料,想实现把这几台电脑用交换机组成一个局域网,来实现指定文件夹的互相调取和写入
- ¥20 求一个简易射频信号综测仪
- ¥15 esp8266 tally灯 接收端改为发射端
- ¥30 Labview代码调用access 数据库,相同代码其中一个调用不出来是为什么