之前在做一个论坛项目的时候,安全性测试时候检测到前后端传输数据的时候使用了明文形式,于是去找了一个适用于前后端加解密的一种加密方式,aes加密的cbc模式,本人对加密的算法一窍不通,这里只是做一下怎么使用并不研究算法。
1.首先了解一下aes的几种加密模式
a.电码本模式(Electronic Codebook Book (ECB)
这种模式是将整个明文分成若干段相同的小段,然后对每一小段进行加密
b.密码分组链接模式(Cipher Block Chaining (CBC))
这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
12232506-27faefa42fde42d28bef168b20736a61.png
c.计算器模式(Counter (CTR))
计算器模式不常见,在CTR模式中, 有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密,但是在计算器不能维持很长的情况下,密钥只能使用一次
d.密码反馈模式(Cipher FeedBack (CFB))
e.输出反馈模式(Output FeedBack (OFB))(这里介绍aes的cbc模式)
2.首先列出测试项目的项目结构
image.png
3.前端测试代码
image.png
![image.png](https://upload-images.jianshu.io/upload_images/7489468-e4479b56fbcf33bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这里需要到的一个加密crypto-js.js文件
image.png
这里提一下 前后端使用的秘钥必须相同
4.服务端代码
image.png
这里测试解密结果所以接收到参数后直接进行了打印
重点看下aes cbc加密模式的一个加解密工具类
image.png
秘钥必须为16位
解密代码执行过程
image.png
image.png
image.png
image.png
下面是一个加密
image.png
image.png
image.png
代码基本已经贴出来了 下面看下运行过程
image.png
image.png
打印输出应该是写错了 这里应该是解密前, 还有一个这里看起来像base64加密,这里说明一下 这里是先aes加密后在base64的,所以不是简单的base64加密
image.png
image.png
解密成功了 这样就可以避免前后端使用明文数据进行裸奔。