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