MD5 到底是不是加密?

829 阅读3分钟

背景

前段时间我去面试了阿里,一上来就问了我很多,对称加密、非对称加密、数字证书、数字签名等这些概念。因为工作中应用接触到的不是很多,所以回答的不是很好。索性回去梳理了一番。

有一天我在工作中,用户登录场景下,为了保证密码不明文传输。前端有个同事告诉我,项目管理也跟我说前端会用md5加密后传递到你的登录接口。

我当时一想,我拿到我怎么解密出来呢?我就给他们说md5不可逆。所以我觉得有必要给他们明确下md5的使用场景。

顺便说下网上有这个网站,我估计很多人都用过

请注意红色部分说明,明确说了破解是靠穷举,海量的数据。不是解密过程。是暴力穷举过程。所以再次说明md5是不可逆的。

那md5到底是什么

MD5:一种哈希算法

实质上,MD5 只是一种哈希算法。

哈希算法,即 hash,又叫散列算法,是一类把任意数据转换为定长(或限制长度)数据的算法统称。例如我叫张三,你叫李四,那么「人 -> 人名」的算法就叫属于一种哈希算法。哈希算法通常用于制作数字指纹,数字指纹的意思就是「你看到这个东西就像看到原数据一样」,例如我们在一些网站下载大文件的时候,网站提供给我们验证文件完整性的 MD5 或者 SHA1 码,就是原文件的哈希值。哈希算法有很多种,MD5 是其中的一种,这就是 MD5。所以,优秀的哈希算法通常需要具有低碰撞概率(即不同数据的哈希值通常也不一样)。

加密是什么?

加密,指的是对数据进行转换以后,数据变成了另一种格式,并且除了拿到解密方法的人,没人能把数据转换回来。因此,加密通常用于网络通信。因为网络上的通信数据,任何人都有可能会拿到,把数据加密后再传送,送达以后由对方解密后再查看,就可以防止网络上的偷窥。例如大家都知道「安全」但很少人知道「为什么安全」的 HTTPS,就是通过加密算法来保障的网络安全性。

所以,MD5 是加密吗?

加密算法的目的,在于别人无法成功查看加密后的数据,并且在需要的时候还可以对数据进行解密来重新查看数据。而 MD5 算法是一种哈希算法,哈希算法的设计目标本身就决定了,它在大多数时候都是不可逆的,即你经过哈希算法得出的数据,无法再经过任何算法还原回去。所以,既然不能将数据还原,也就不能称之为可以解密;既然不能解密,那么哈希的过程自然也就不能称作是「加密」了。

MD5适用场景

最场景大家都接触过,就是下载文件的时候有个MD5摘要信息附带一起,这个MD5摘要信息,就是为了验证文件在网络传输过程中,没有背篡改过。所以MD5更多的时候适用于需要对传输的数据做验签的时候。