前端CryptoJS和后端Java中AES对称加密注意事项

发布时间 2023-12-16 01:25:18作者: dirgo

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相对不安全

 

其他参考文章:

理解AES加密解密的使用方法_aes密钥-CSDN博客

JavaScript Crypto-JS 使用手册 – 抒写

前端加密JS库--CryptoJS 使用指南 - Tommy_marc - 博客园

CryptoJS简单使用(request.js) 拦截器的使用 - 徐肥美 - 博客园

JS前端加密JAVA后端解密详解 - 霞光里 - 博客园

JS加解密库CryptoJS - 掘金

Vue使用CryptoJS实现加密,Java后台解密的步骤和方法 - 简书