|
前几天公司有个需求,需要前端对于传输的数据进行加密,之后到后端进行解密,当时第一考虑到了MD5,但是因为在我的印象里面,MD5貌似无法解密,还问了我们后端MD5可以解密码他说可以,网上有代码可以解密,于是我就使用MD5进行加密。
大概过程就是
1.引入MD5.js
2.使用里面的MD5进行加密
之后又和后端联调一下,注意 坑的就是这里,我们测试的时候加密的太简单,一般就是123456 或者456321 这样的东西,之后我们还很高兴,当时我还因为感觉不是很安全,我又改了一下,因为我以前用的nodeJS 当时加密的时候总喜欢这么写:
var crypto = require('crypto'); 引入加密的模块
加密
var md5 = crypto.createHash('md5');
var password = md5.update(req.body.password).digest('base64');
于是机智的我就在前段在MD5加密之前,又用base64加密了一下,结果悲剧了!!!
TMD 后端解密不出来,开始因为时间比较紧以为是base64加密有位置,就把代码注视了,直接使用MD5,没想原因,先把base64加密撤了,赶紧走一遍,但是悲剧重现了,还是解密不出来 。。。 这就要命了,回头查原因,结果我们都斯巴达了 。。。
重点来了:原来我们做的一直都是闹着玩呢 。。。,都是在骗自己
MD5加密原理是散列算法,散列算法也称哈希算法。
计算机专业学的数据结构就有哈希表这一知识点。
比如10除以3余数为一,7除以3余数也为一,但余数为一的就不知道这个数是哪个了。
所以md5不能解密。
就算是设计这个加密算法的人都不知道。
这也就是为什么很多地方密码只能重置,不能修改的原因了
之前能够顺利解密,是因为我们加密的东西太简单,你把密码弄成无规则带有英文字母,都不用说特殊字符了,你解密一下看看 。 。 。
瞬间懵逼 ~~~
好吧,那么问题又来了,为什么有那么多网站还能解密MD5呢?
我专门查了几个网站,做的真的不错地址给大家可以看下,这个是免费的,收费的一搜一大堆
他们这是怎么回事呢?
其实 他们都是暴力破解的,,因为MD5的加密让人很无语,所以现在大部分站点破解都是暴力破解,一旦东西复杂而且字符不短,那就over了,要么时间太长,要不根本就破解不了
OK,言归正传,经过这次,我得到了经验,以后关于一些传递信息,如果需要加密传输的,别上来就直接加密,不管你用什么方式,首先考虑的是有没有什么方式避免这种将安全数据在外网传输,给大家举个例子
我要一个请求,这个请求需要将用户所有信息传入后端,之后后端拿这些信息,进行业务流程,就像有需要权限使用的地方,很多人地方会把账号、权限等级等一些东西发送过去,后端直接拿着进行判定操作,数据返回,但是真的必须要这样吗???这样我肯定要加密传输不说,而且只要是需要解密的我们能解密,那么别人也可以解密啊。
换种思考方式,为什么要传账号呢,我在登陆的时候就记录下用户ID,我直接发送用户ID不就可以了吗,之后后端那么用户ID进行调用,这也是一样的啊,虽然后台多走了一步,但是五款是安全还是操作方式都会方便很多,再说你在浏览器获取用户id总比获取用户信息要好吧
最后致敬伟大的后端 |
|