md5真的不可逆吗?安全吗?

常常听到有人说md5不可逆,就是不能被反推,是啊从理论上讲md5是不可逆的因为他的值是唯一的,你怎么能100%能知道加密前内容是什么?万一发生碰撞呢?

碰撞即不同的字符串md5加密后md5值相同,我称之为md5碰撞,概率蛮小的至少我还没发现过。

但是网上有很多彩虹表,我们可以通过彩虹表来查询其加密前的字符, 彩虹表就是实现吧加密前的值和加密后的值存到数据库或者是文本文件,这样在下次就能通过查询获得加密前的值,比如123456加密后的值是e10adc3949ba59abbe56e057f20f883e那么我们先存起来然后反推不就知道加密前的值了吗?所以他是可以破解的也就是可逆的,但不是100%可逆,这是不是很矛盾?

那么他安全吗?

相对安全看你怎么用了,至少比明文强吧!

目前各大md5破解网能破解字符在10位左右,所以你密码太短完全可以破解出来,但是用户输入那么长的字符串体验多么不好,除非你是银行。

那么可以通过加盐的方法来减少用户密码的同时增加md5破解难度。

比如同样是md5 123456 我们可以在他的尾部加一个 j2df4k3d3j2A2 ,然后新的密码就是 60867f6de32ef595a5dcc36a25701825,这个相当复杂了吧,基本很难破解了。当然你可以再加很多,推荐16位以上吧。这种方式就叫做加盐,就是加点调料而已。

如果是大型公司可以针对每个人设置不同的盐,就是指每个人加密方式不一样,把盐放到另一台服务器上,这样退一步说即使你主服务器遭到入侵,加盐的服务器没入侵,那么即使他们拿到密文也无可奈何、

以上是我个人意见,欢迎和我交流。

附:

http://dxxing.com/md5/