防御的核心:
验证签名
因为通过验证签名,比对参数后,可以发现参数是否发生变化来判断数据是否被篡改。
例如:
客户端真实发送请求为:后面有签名,相当于加一个参数,相当于我们的客户端发送请求的时候带的签名,相当于对我们整个参数做一个md5值得出一个签名。
http://127.0.01:8080/toPay?amount=10000&sign=
抓包工具篡改请求的参数:
http://127.0.01:8080/toPay?amount=1
哪怕抓包数据被篡改,但是通过md5签名去做验证的时候发现值发生了变化,说明出现了问题。
使用md5单向加密的原因就是因为md5属于单向加密,所以不能进行解密,只可以进行暴力破解。
原理:
内容为:Str = uqcharles666
变成:sxsxsxsxsfsdfX
所以,一般密码都会选择md5加密。
md5加密工具类:
通过使用这样的api接口加密:
在主类中创建一个test:
输出结果如下:
但是,反之,也有方式可以暴力破解md5加密:
例如:https://www.cmd5.com/
md5暴力破解原理:
首先,要收集一些常用的密码如123456,就可以暴力破解网站。加密=“”,反向,输入加密值,就可以拿加密值查对应的密码是多少,就容易破解了。
所以,在使用md5单向加密的时候,注意要加盐。
实现加盐如下:
如初始代码为:String pwd="123456";
加盐后:
String value = DigestUtils.md5Hex(data:pwd+"charles6666");
加盐后就使用在线暴力破解md5就查询不到了,因为不知道123456+uqcrles6666对应的值是多少,所以就会查询不到,真实的暴力破解都是通过简单的数据存在数据库中进行对比。因此,MD5加密还是非常安全的,但是需要注意加盐,后面的值为盐值。当然了,切记,盐值不可以进行公开,否则可以进行破解。
实战中,将盐值设置为每次都不一样,也就是建议做成动态模式。通过userid或者自己动态生成。
好了,今天分享到这里啦~
喜欢的记得点赞关注收藏哦,欢迎探讨在这个技术世界中~