1.前后端秘钥,算法,偏移量,模式,填充等要一致(废话但是重要,要注意检查)
2.算法 AES有AES-128 AES-192 AES-256,后面的数字即秘钥长度,据说后两个在Java中使用需获取无政策限制权限文件,所以一般用128位的,换算到字符串就是16字节,即16个英文字母或数字或符号.
3.如果模式使用CBC,则偏移量 iv 必填,也是128位,有些工具库可能会对不足或超过的进行处理,但最好还是用128位的.
4.CryptoJS加密后的结果有两种:
4.1 加密结果数据.toString() 是Base64编码的,则需要先用Base64解码再执行解密操作
4.2 加密结果数据..ciphertext.toString() 是Hex,也就是16进制形式,后台也 需要先 转成 byte[] 比特数组,再进行解密
5.填充模式,CryptoJS的Pkcs7和Java的PKCS5Padding是兼容的,最常用;另一个两者都有的是NoPadding,要求数据长度都正好是分组长度(AES为128位)的整数倍,明显是不大可能的;再者就是前端使用ZeroPadding,后端自己写代码将不足的位数填0,具体可参考下文:CryptoJS前端页面js通过AES加密后端java解密实例 - CryptoJs教程 - V型知识库.
6.AES属于块加密,模式ECB没有使用iv相对不安全
其他参考文章:
JavaScript Crypto-JS 使用手册 – 抒写
前端加密JS库--CryptoJS 使用指南 - Tommy_marc - 博客园
CryptoJS简单使用(request.js) 拦截器的使用 - 徐肥美 - 博客园
Vue使用CryptoJS实现加密,Java后台解密的步骤和方法 - 简书