
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的确 可以看到明文

没配置证书抓到的包是密文显示

配置证书后,抓到的包是明文显示
你或许能通过某种见不得人的手段,拦截到了客户的包,但你也得要别人同意安装你的证书才行。
有人说,还有什么伪证书方式,我只想说,难不难,你试试才知道?老实说,我的确 不懂,也不想暂时不想研究下去了。
作者:茂子,某985计算机硕士。如果文章对你有用,欢迎关注,你的关注是我持续输出有价值的原创文章的动力。
你是不是想表达,用户登录时,用户输入的密码md5加密,传到后端,你截取到这个md5加密字符串,你也能用这个用户登录是不是。
说了个寂寞,加密后无法解密为啥不能用做密码加密,如果说抓包,无论用什么加密一样抓包
密码用md5传输是为了数据库不保留明码,即便http被窃取也只是一个人的。否则数据库被黑就全部泄密了,然后又可以拿着这些去其他网站撞库。
确实像其他人说的概念不清,首先采用md5对密码做摘要是为了保证原始密码的安全,md5并不能保证系统登录不被入侵。那么在客户端做md5再进行网络传输,是为了在网络传输环节保护密码原文,黑客抓取了网络包有也只能得到md5摘要,但这并不能防止黑客伪造登录。同理,在数据库存储md5摘要,则是为了在存储环节保护原始密码安全,避免数据库被入侵后泄露原始密码。原始密码安全也是非常重要的,黑客一旦拿到原始密码,那么即使漏洞补上了,还是很难防住黑客,除非用户全部修改密码,另外一个系统的原始密码可以拿去攻击其他n套系统,因为用户可能在哪个系统都是用的同一个密码,这也是一个大问题。一句话,md5就是丢弃原始密码来保证不泄露原始密码,跟什么传输协议没关系
一般md5加密是这样的token=md5(密码+随机串+通讯双方都知道的一个字符串),token和随机串网络明文传输,通讯双方都能检验是否正确,而第三方不知道那个字符串,想伪造token,很难
可以用来加密:对于不多于16字节的明文,最简单的算法为:密钥 = md5(password)加密: 密文 = 明文 xor 密钥解密: 明文 = 密文 xor 密钥当然还可以设计出复杂的算法。
现在的业务接口都用token进行检验了,md5只是加密明文密码用(有些还加盐),只是登录的时候进行用户身份验证使用,验证过程是在程序内部进行的,数据库里存储的那个md5字符串根本就不会流出到接口之外,你得不到那个数据库里的md5字符串,你只能得到验证通过还是未通过的结果而已。
还是可以用的,但要在明文上叠加一个临时从服务端获得的随机数,这样每次发送的明文就不同了,再结合session更新机制,就可以获得较高的安全性,作为没办法使用https的替代方案。
作者可能不知道什么叫非对称加密吧。
base64也可以说一篇,不是加密不是加密不是加密,这个也碰到好多人都分不清。
哈哈哈,base64比md5更不具迷惑性
密码+md5 也不是为了加密啊
密码存成md5不加盐就是耍流氓
用md5加密是菜鸟级别的程序员,比如我,就是程序简单化,肯定是不能对抗高手的
md5必须加点盐才行
你懂的太少了。服务端请求密码的时候,发个随机字符串就好了。每次发送的都不一样。客户端把密码和服务端字符串一起md5就好了。不怕重放。pppoe早就用起来了。
作者这个讲得很好,网上有很多二把刀程序员很自信的说MD5是可逆能破解的,连加密原理都搞不清楚。所谓能破解只是密码本原理,撞库而已
密码学算法分三类:单向散列函数(哈希函数):md5,sha1,sha256,sm3对称算法:des,aes,sm4非对称算法:rsa,ecc,sm2
md5一般用来做校检的。解密干啥?
简单的说很多人搞不清楚摘要和加密的区别
建议阅读下安全学这本书,到底md5是不是加密。另外md5加言加密,独一无二,反推不出