0

0

一文搞懂Hash算法以及应用场景

王林

王林

发布时间:2023-04-13 11:55:02

|

2942人浏览过

|

来源于51CTO.COM

转载

一、什么是哈希算法

哈希和散列都来源于单词hash,前者是音译,后者是意译。是一种可以将任意长度的二进制值映射为固定长度二进制值的算法,映射后固定长度的二进制值被称为哈希值。一个优秀的哈希算法需要满足以下几点要求:

不能从哈希值反向推导出原始数据;

对输入数据非常敏感,一个bit不同就会导致哈希值非常不一样;

散列冲突的概率要很小;

哈希算法的计算过程要足够简单高效,即使原始数据很长,也能很快得到哈希值;

二、哈希算法的使用场景

2.1 安全加密

比较常见的哈希加密算法有MD5(MD5 Message-Digest Algorithm, MD5消息摘要算法)和SHA(Secure Hash Algorithm, 安全散列算法)。

不能从哈希值密文反推出明文密码,且散列冲突概率比较小,这两点确保了哈希算法作为安全加密手段的可靠性。

为什么哈希算法不能完全避免散列冲突,只能尽量减少?

鸽巢原理告诉我们,11个鸽子飞进10个鸽子笼,那么必定有一个鸽子笼里面有2只及以上的鸽子。那么散列值是固定长度的,也就决定了散列值可以被穷举,但是理论上原始数据是无穷无尽的,因此必定有可能会导致散列冲突。

这种应用场景用到了哈希算法的特点1和3,其中3保证了密码被正向破解的难度很大(以MD5为例,散列值长度为128位,有2^128个不同的哈希值,很难被破解)。

安全领域没有绝对的安全,虽然MD5很难被破解,但是还是有办法被破解的,比如使用彩虹表匹配可以很轻松地破解常见密码。

所以一般我们会使用加盐的哈希算法来进行安全加密,加盐的方法需要严格保密,如此让破解的难度和成本都大大增加。

2.2 唯一标志

我们在校验两个文件是否一样的时候,是不能简单地通过文件名来进行判断的。因为同名文件的存在太常见了。

我们可以从大文件中按照特定的规则取一些二进制数据,利用哈希算法得出哈希值作为该文件的唯一标志。如此相同的文件必定具有相同的哈希值,也就是相同的唯一标志;不同的文件在很大概率上是具有不同的哈希值唯一标志的;

即使真的遇到了散列冲突,我们可以再详细比对两个文件的全部二进制数据,进一步判断它们是否是同一个文件,这个事件发生的概率太小了。但是这种方案既保证了高效,又保证了可靠。

这种应用场景用到了哈希算法的特点2和3。

MedPeer
MedPeer

AI驱动的一站式科研服务平台

下载

2.3 数据校验

在P2P下载协议中,我们会从不同的机器上下载同一部电影的不同部分,然后在自己的机器上将电影组装起来。如果这其中某个部分的电影下载过程中出了错误或者内容被篡改了,就可能导致下载出错或者中病毒。

因此,我们先对所有部分进行hash计算,并保存在种子文件中。等到所有部分下载完成,我们对所有部分进行哈希计算得到哈希值,再和种子文件中的进行比较,以此来校验文件是否完整。

这种应用场景用到了哈希算法的特点2和4。

2.4 散列函数

这种场景在前面讲过散列表的时候就已经介绍了。这种场景下,对特点1要求不是很高,特点2的要求是散列值要尽量均匀分布,特点3也在一定程度上可以接受冲突,使用开放寻址法和拉链法就可以解决,就是特点4要求高一点,需要追求性能。

2.5 负载均衡

负载均衡的算法有很多,比如轮询、随机、加权轮询等,但是目标是要实现一个会话粘滞的负载均衡算法,即同一个客户端在一个会话期间所有的请求都是路由到同一台服务器的。

我们可以将客户端的IP或者会话ID进行哈希计算,得到的哈希值与服务器个数进行取模运算,最终得到的值就是需要路由的服务器,这样就能实现会话粘滞的目的。

2.6 数据分片

当我们需要处理海量数据的时候,单台服务器无法加载和计算如此海量的数据,那么我们就需要将海量数据均匀地分给N台服务器进行并行计算,如何将数据均匀地分给N台服务器呢?

我们对数据进行哈希计算,用得到的哈希值对服务器个数N取模,相同结果的数据会被分到相同的服务器上,交给这台服务器处理。N台服务器并行处理海量数据,最终再将结果合并起来即可。

2.7 分布式存储

将海量数据存储到分布式缓存或者分布式数据库中,借用的思想和上面的数据分片是类似的。只不过,当原先设定好的服务器数量不够的时候该如何处理呢?

并不是简单地加几台机器就能解决的,这会破坏哈希值的取模运算,导致缓存穿透,引起雪崩效应。同理,当某个机器故障被移除时也会导致相同的问题。这个时候需要借助一致性哈希算法来解决这个问题。

一致性哈希算法简单地说就是构造一个hash环,环上有2^32个节点,将服务器IP和文件都hash计算映射到对应的节点上。所有文件顺时针遇到的第一个服务器就作为自己存放的服务器。如此,当增加或者删除某个服务器的时候,影响的文件个数就可控,不会造成全局雪崩。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

一文搞懂Hash算法以及应用场景

hash环

但是,在一定概率上,服务器IP在映射到hash环上时,会出现hash环偏斜的问题,此时会导致服务器上文件分布极其不均匀,退化为一开始在增删服务器时容易造成雪崩效应的场景。

一文搞懂Hash算法以及应用场景

hash环的偏斜

我们可以人为地为这些服务器增加若干虚拟节点,使得所有服务器节点在hash环上分布均匀。

一文搞懂Hash算法以及应用场景

带虚拟节点的hash环

三、总结

Hash算法的使用场景远远不止上述这些,还有比如CRC校验。

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

88

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

90

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

61

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

493

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

16

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

12

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

5

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.2万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 1.9万人学习

550W粉丝大佬手把手从零学JavaScript
550W粉丝大佬手把手从零学JavaScript

共1课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号