阅读 803

哈希函数的理解

前言

什么是哈希函数?它能用来干嘛?本文将以图文的形式讲解上述问题,欢迎各位感兴趣的开发者阅读本文。

概念与作用

哈希函数可以把给定的数据转换成固定长度的无规律数值。转换后的无规律数值可以作为数据摘要应用于各种各样的场景。

图解示例

我们可以把哈希函数想象成搅拌机,如下图所示。

  • 将数据放进搅拌机里
  • 经过哈希函数计算后,搅拌机会输出固定长度的无规律数值。输出的无规律数值就是“哈希值”。哈希值虽然是数字,但多用十六进制来表示。
  • 计算机使用二进制管理所有数据,虽然哈希值是用十六进制表示的,但它也是数据,计算机在存储哈希值时,会通过计算将其转换为二进制进行管理。

哈希函数的特征

  • 哈希值的长度与输入数据的大小的无关
  • 输入相同数据,输出的哈希值也必定相同
  • 输入相似的数据,输出的哈希值必定不同。
  • 输入的数据完全不同,但输出的哈希值可能是相同的。虽然这种情况的出现概率较低,这种情况就叫做“哈希冲突”
  • 哈希值是不可逆的,通过哈希值不可能反向推算出原本的数据。

哈希函数的作用

哈希函数的算法中具有代表性的是MD5SHA-1SHA-2等,其中SHA-2是现在应用较为广泛的一个,而MD5和SHA-1存在安全隐患,不推荐使用。

不同算法计算方法不同,计算出来的哈希值也会有所不同。哈希函数的特征中有一条是输入的数据相同,输出的哈希值也必定相同,这个特征的前提是使用的是同一种算法。

根据哈希函数的特征,我们可以将其应用到数据库密码的保存

如果把密码直接保存到服务器,可能会被第三者窃听,因此要算出密码的哈希值,并只存储哈希值。当用户输入密码时,先算出该密码的哈希值,再把它和服务器中的哈希值进行比对。这样一来,就算保存的哈希值暴露了,鉴于哈希函数“哈希值不可逆”的特征,第三者也无法得知原本的密码。

就像这样,使用哈希函数可以更安全地实现基于密码的用户认证。

写在最后

  • 文中使用的图片源自《我的第一本算法书》,如若侵权,请评论区留言,作者立即删除相关图片。
  • 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
  • 本文首发于掘金,未经许可禁止转载💌
文章分类
后端
文章标签