当前位置: 首页 > news >正文

什么是哈希函数

目录

🧩 一、什么是哈希函数(Hash Function)?

🧠 二、哈希函数的基本特性

🔐 三、常见的哈希函数类型

🔧 四、常见使用场景

1️⃣ ✅ 密码存储(加密安全场景)

2️⃣ ✅ 数据完整性校验

3️⃣ ✅ 哈希表(Hash Table)

4️⃣ ✅ 数字签名 / 电子签名

5️⃣ ✅ 区块链和比特币

6️⃣ ✅ 版本控制系统(如 Git)

🧪 五、一个直观例子(SHA-256)

⚠️ 六、哈希函数不是加密!

✅ 七、总结表


我们来系统且通俗地讲一讲哈希函数(Hash Function)是什么、它的核心特性、常见类型,以及各种使用场景


🧩 一、什么是哈希函数(Hash Function)?

哈希函数是一种将任意长度的数据(如字符串、文件、图片等)映射为固定长度的输出值的函数,这个输出值称为“哈希值”(hash value)或“摘要”(digest)。

📌 哈希函数的数学表达式:

h(x)=y

其中 x 是输入,h 是哈希函数,y 是输出(固定长度)


🧠 二、哈希函数的基本特性

特性含义
确定性同样的输入必须返回相同的输出
高效性计算速度快,即使是大文件也能迅速处理
固定长度输出不论输入多大,输出长度不变(如 SHA-256 总是输出 256 位)
雪崩效应输入只要有一点变化,输出就会完全不同
抗碰撞性找到两个不同的输入 x≠yx \neq yx=y,使得 h(x)=h(y)h(x) = h(y)h(x)=h(y) 很困难
不可逆性从输出值很难(实际上不可能)推回原始输入(单向函数)


🔐 三、常见的哈希函数类型

哈希函数输出长度安全性用途
MD5128 位❌不安全(已被破解)文件校验、老系统
SHA-1160 位❌不安全(已被破解)旧版加密协议
SHA-256256 位✅安全密码加密、数字签名、区块链
SHA-3可变✅安全(新标准)替代 SHA-2 的新方案
CRC3232 位⚠️非加密安全数据完整性检查


🔧 四、常见使用场景

1️⃣ ✅ 密码存储(加密安全场景)

  • 原密码不能明文保存,使用哈希函数加密:

用户输入密码 → 哈希处理 → 存储哈希值
  • 验证登录时再次哈希用户输入,与数据库中的哈希值对比。

常用算法:SHA-256、bcrypt(加盐)、PBKDF2、Argon2 等


2️⃣ ✅ 数据完整性校验

  • 用哈希值确认文件是否被篡改:

下载文件时,网站同时提供文件的 SHA-256 值。
  • 下载后你用工具生成自己的哈希值对比,判断是否一致。

常用工具:md5sumsha256sum


3️⃣ ✅ 哈希表(Hash Table)

  • 在编程中,哈希函数用来快速查找数据:

Map<String, Integer> map = new HashMap<>();
  • 键通过哈希函数转化为数组索引,提高查找效率(接近 O(1))

使用语言层级的哈希函数:Python 的 hash(), Java 的 hashCode()


4️⃣ ✅ 数字签名 / 电子签名

  • 数据先进行哈希,然后再用私钥对哈希值进行签名,提升效率和安全性。


5️⃣ ✅ 区块链和比特币

  • 区块链中的每个区块都包含前一区块的哈希值,构成链条。

  • 比特币使用 双重 SHA-256 进行挖矿、验证交易。


6️⃣ ✅ 版本控制系统(如 Git)

  • Git 使用 SHA-1 对文件内容、提交、分支等对象生成唯一标识符(hash ID)。

  • 每个提交都有一个像 e3b0c4... 的哈希值来标识。


🧪 五、一个直观例子(SHA-256)

echo -n "hello" | sha256sum

 输出:

2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

然后你改成 "Hello",就会得到完全不同的结果。


⚠️ 六、哈希函数不是加密!

加密哈希
可逆不可逆
有密钥无密钥
用于信息隐藏用于身份/完整性验证
AES, RSA 等MD5, SHA-256 等


✅ 七、总结表

项目内容
定义将任意长度数据映射为固定长度输出的函数
特点确定性、固定长度、抗碰撞、不可逆
用途密码保护、数据完整性、哈希表、签名、区块链、Git
代表算法SHA-256、SHA-3、MD5(不推荐)、SHA-1(不推荐)

相关文章:

  • AIGC 基础篇 Python基础 05 元组,集合与字典
  • 深入理解 PCIe 协议中 BDF(Bus/Device/Function)分配与管理机制
  • 华为云Flexus+DeepSeek征文 | 基于Dify构建多语言文件翻译工作流
  • Qwen家族系列模型概述
  • 二刷苍穹外卖 day02
  • 强化学习入门:交叉熵方法实现CartPole智能体
  • 【案例实战】轻创业技术手册:如何用最小MVP模型验证市场需求?低成本创业可以做什么?低成本创业项目排行榜前十名!轻资产创业项目做什么比较好?格行代理怎么样?
  • 计算机网络 : 数据链路层
  • Java/Kotlin selenium 无头浏览器 [Headless Chrome] 实现长截图
  • 2025神经网络动力学理论、优化算法及应用专题研讨会 ( NOTAA 2025)
  • 一键生成活动页面的智能体开发实践:从策划到分发的全自动化解决方案
  • Android studio中git突然看不了提交记录
  • flink1.19.2+cdc-3.2.1遇到的问题及解决方案
  • 【AI大模型入门指南】概念与专有名词详解 (二)
  • 达梦数据库单机部署dmhs同步复制(dm8->kafka)
  • mac电脑.sh文件,用来清除git当前分支
  • 代码填空题技术实现:突破 highlight.js 安全限制的工程实践
  • 数值偏微分方程的代数骨架:线性代数及其挑战-AI云计算
  • Cilium动手实验室: 精通之旅---23.Advanced Gateway API Use Cases
  • 机器学习与深度学习18-线性代数01
  • 网站推广国外/百度关键词模拟点击软件
  • 网站开发报价和开发周期/百度seo网站优化服务
  • 设计教育网站/网站seo设置是什么意思
  • 网站产品内页设计/5g站长工具查询
  • 10m网站并发量/电子商务网站建设论文
  • 响应式网站多少钱 开发/windows优化大师的功能