之前在做一个论坛项目的时候,安全性测试时候检测到前后端传输数据的时候使用了明文形式,于是去找了一个适用于前后端加解密的一种加密方式,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://img.haomeiwen.com/i7489468/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解密成功了 这样就可以避免前后端使用明文数据进行裸奔。
网友评论