哈希函数的理解

简介: 哈希函数的理解

前言


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


概念与作用


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


图解示例

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


640.png


  • 将数据放进搅拌机里


640.png


  • 经过哈希函数计算后,搅拌机会输出固定长度的无规律数值。输出的无规律数值就是“哈希值”。哈希值虽然是数字,但多用十六进制来表示。


640.png


  • 计算机使用二进制管理所有数据,虽然哈希值是用十六进制表示的,但它也是数据,计算机在存储哈希值时,会通过计算将其转换为二进制进行管理。


640.png


哈希函数的特征


  • 哈希值的长度与输入数据的大小的无关


640.png


  • 输入相同数据,输出的哈希值也必定相同


640.png


  • 输入相似的数据,输出的哈希值必定不同。


640.png


  • 输入的数据完全不同,但输出的哈希值可能是相同的。虽然这种情况的出现概率较低,这种情况就叫做“哈希冲突”


640.png


  • 哈希值是不可逆的,通过哈希值不可能反向推算出原本的数据。


640.png


哈希函数的作用


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


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

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


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


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


写在最后


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


相关文章
|
1月前
|
存储 索引 Python
什么是可哈希对象,它的哈希值是怎么计算的?
什么是可哈希对象,它的哈希值是怎么计算的?
63 6
|
5月前
|
存储 索引
哈希表刷题总结
哈希表刷题总结
25 1
|
存储 缓存 算法
一篇文章让你学会什么是哈希(上)
哈希概念 哈希在C++中有广泛的应用,它是一种用于快速查找和存储数据的数据结构和算法。以下是一些常见的哈希在C++中的应用: 哈希表(Hash Table):哈希表是一种高效的数据结构,用于存储键值对。在C++中,std::unordered_map 和 std::unordered_set 是标准库提供的哈希表实现。
|
6月前
|
存储 C++
哈希的开放定址法的实现【C++】
哈希的开放定址法的实现【C++】
|
6月前
|
存储 Serverless C++
哈希的简单介绍
哈希的简单介绍
65 0
|
存储 Serverless C++
哈希(C++)上
哈希(C++)
79 0
多阶哈希
多阶哈希
139 0
|
6月前
|
存储 缓存 Java
哈希表超详解
哈希表超详解
|
6月前
|
存储 Serverless 测试技术
C++【初识哈希】
C++【初识哈希】
62 0
|
存储 Serverless C++
C++哈希
C++哈希