md5不能拿来做加密,它只是生成摘要的工具!
本文较长,自认为有点深度。看完后,如果文章对你有用,欢迎关注,你的关注是我持续输出有价值原创文章的动力。提纲如下:
- md5摘要到底是什么?
- md5能否解密?
- 摘要有啥用?
- 在没有https的情况下,对密码进行md5安全性等于0!
- https抓包也可以明文显示,安全吗?
md5摘要到底是什么?
就是说,不管你的内容短到一个字,还是长到一本小说,md5之后,生成的都是固定长度的字符串(常用的有16、32、64个字符,多数为32,下面按32来说明),这个字符串就是摘要,跟我们人工写的文章摘要一个意思。
差异点在于,人工写的摘要相同可能性不会很小,长度也不一样,而机器写的摘要长度一样,而且几乎不可能一样,相同概率是2的256次方分之一。
md5能否解密?
我们暂且假设md5可以当作加密算法,那么加密肯定是要解密的咯,你觉得你可以根据32位解密一本古龙小说出来吗?
不能!(下面告诉你其实对这种特殊情况是可以的)
首先我得告诉你,加密算法不是由计算机科学家发明的,都是由全球顶级数学家经过复杂数学理论设计的,加密算法就摆在哪里,可你拿到密文就是解不出原来的明文,就连设计加密算法的数学家也解密不出,这就是数学之美。
那有人会说了,为什么网上有md5解密的?比如这个:
我告诉你,这是这个网站记录了常用的一些明文和它对应的密文,当你输入密文,自然明文就可以查询出来。比如普通的a、b、c…z…、123456、iloveyou等等,还有古龙小说全集,早就记录在案了,所以古龙小说没准可以破解,但有后面会告诉你不是没有成本的。
不信?你试试改一些上面的密文,他就要好久好久好久…才能解密原文了,就是说需要穷举暴力破解了。
当然,现代计算机算力越来越强(各种云运营商),存储空间也越来越大,那么在利益驱动下(收费模式),这种事情也不是没可能。
至于成本有多大,看某网站的介绍就知道了:
在这样的情况下,采用大数据分布式查询,查询一些在记录中的还是很快的,不在记录中的,只能通过不知猴年马月的穷举了。
当然这些服务器没事时,估计也是在不断穷举,并且把新纪录记录下来,但太太太浪费资源了。
这么说吧,把一句“I love you”的各种组合的md5值记录下来就已经不错了。
他们为什么不把“I love you”这句生成的md5值收费呢?因为这些md5“解密”(现在知道为什么要在解密两边加上双引号了吧,实际是还原)网站,也不少,也在内卷。不给你试试能解密,谁会用呢?
摘要有啥用?
一般用来鉴定被md5的原文是否一样,比如你要对比古龙小说和盗版的古龙小说内容是否一致,按普通算法是不是要一个字一个字对比,甚至标点符号也要对比?
有摘要就不一样了,对比一下两篇文章的摘要,一样,说明内容就是一样的。
在没有https的情况下,对密码进行md5安全性等于0!
有些网站没有https很正常,因为网站站长根本就不懂技术嘛!
但对于程序员,对接口只采用md5进行所谓的“加密”就不能原谅了!
虽然他们写的接口,不像网站暴露在外面,只是前后端相互调用,但要抓他们的包真的轻而易举。
抓到调用接口和经过md5“加密”的参数怎么“调戏”这个程序员?
这时候,你也许会说,我根本没传输密码啊,只是md5值啊,
后端我就用数据库存储的密码也进行md5,将md5值对比一下就可以判断是否正确的密码啊,
即使你拦截到md5值也没用啊。
没错,我是不知道你的原密码,所以我没法在网页里输入原密码,但我根本不需要通过网页输入。
直接通过postman调用你的接口行不行?行。
调用接口的时候一般都是拿到已经md5过了的字符串,我无须关心原来是什么,直接接口传入的是这个字符就可以。然后我就调用不同需要这个md5值的借口,想要拿什么数据就拿什么数据,想要修改什么就修改什么。
简不简单?简单。
也就是说,我把这个md5后的字符串,当作密码来用,一点问题都没有。
所以你必须配合https对传输的内容进行加密。
https抓包也可以明文显示,安全吗?
正如上面这个问题,有些人要跳出来挑战我了。
来源网络:https抓包明文显示原理图
他们通过Charles抓包,在电脑安装信任Charles证书,且在手机端安装Charles抓包软件的证书后,在Charles确实可以看到明文
没配置证书抓到的包是密文显示
配置证书后,抓到的包是明文显示
你或许能通过某种见不得人的手段,拦截到了客户的包,但你也得要别人同意安装你的证书才行。
有人说,还有什么伪证书方式,我只想说,难不难,你试试才知道?老实说,我确实不懂,也不想暂时不想研究下去了。