🌐 ZH

🔐 哈希生成器

将文本转换为各种哈希算法。可用于文件完整性验证、密码哈希处理和数据校验。

选择文件后将生成该文件内容的哈希值
指南

了解更多

01

1. 什么是哈希函数

哈希函数(Hash Function)是一种将任意大小的数据转换为固定长度值的单向函数。它具有雪崩效应,即输入哪怕只有微小变化,输出的哈希值也会完全不同;而相同的输入始终会产生相同的输出。MD5生成128位哈希,SHA-1生成160位哈希,SHA-256生成256位哈希。由于哈希是无法逆向解密的单向函数,因此非常适合在隐藏原始数据的同时验证数据完整性。它被广泛应用于文件下载校验、密码存储、区块链和数字签名等领域。

02

2. MD5与SHA算法对比

MD5是1991年推出的128位哈希算法,速度极快,但容易受到碰撞攻击。2004年发现了严重的安全漏洞后,MD5已不再适用于密码学用途,目前仅用于文件校验等场景。SHA-1生成160位哈希,虽然比MD5更安全,但2017年谷歌公布了真实的碰撞案例后,该算法也被逐步淘汰。SHA-256属于SHA-2系列,生成256位哈希,是目前应用最广泛的标准算法,比特币也采用SHA-256。SHA-512生成512位哈希,安全性更高,但计算速度较慢。新系统应优先采用SHA-256及以上的算法。

03

3. 哈希安全性与漏洞

哈希函数的安全性主要有三项核心要求。第一,原像抗性(Preimage Resistance):难以从哈希值反推出原始数据。第二,第二原像抗性(Second Preimage Resistance):难以找到另一个能产生相同哈希值的输入。第三,抗碰撞性(Collision Resistance):难以找到两个不同的输入产生相同的哈希值。MD5和SHA-1的抗碰撞性已被攻破,攻击者可以人为构造出具有相同哈希值的不同数据。彩虹表(Rainbow Table)攻击是利用预先计算好的哈希表进行反查的方法,添加盐值(Salt)可以有效防御这种攻击。

04

4. 文件完整性验证

文件哈希是验证下载文件是否被篡改的最有效方法之一。软件发布网站通常会随文件一同提供官方哈希值。用户下载文件后自行计算哈希值,并与官方公布的值进行比对。哪怕只有一个比特发生变化,得到的哈希值也会完全不同,因此可以立即察觉篡改行为。这一方法在Linux镜像文件、开源软件、区块链交易等场景中都是必不可少的。Git也会为每一次提交生成SHA-1哈希,以确保代码的完整性。在大文件传输过程中,因网络故障导致的数据损坏同样可以通过哈希值检测出来。

05

5. 密码哈希的最佳实践

将密码存入数据库时,绝对不能以明文形式保存,而应转换为哈希值存储。但单纯使用MD5或SHA-256并不足够安全,因为它们容易受到彩虹表攻击。必须额外添加盐值(Salt)——即为每个密码附加的随机字符串,使相同的密码也能生成不同的哈希值。此外,还应使用bcrypt、scrypt、Argon2等计算速度较慢的哈希函数,它们会刻意降低计算速度,从而增加暴力破解的难度。OWASP将Argon2列为密码哈希的首选推荐算法。

06

6. 彩虹表与加盐机制

彩虹表(Rainbow Table)是一个存储了大量预先计算好的哈希值的庞大数据库。攻击者会预先计算数百万个常见密码的哈希值,一旦获取到被盗的哈希数据,便可通过匹配来还原出原始密码。例如,"password123"的MD5值始终固定为"482c811da5d5b4bc6d497ffa98491e38",因此可以在表中迅速查到。加盐(Salt)正是应对这一问题的有效方法:为每个用户添加独一无二的随机字符串后,即便密码相同,生成的哈希值也会不同。将"password123"与"x8k2m9"拼接后再哈希,得到的结果就不会出现在彩虹表中。盐值本身可以以明文形式存储在数据库中,但每个密码都应使用不同的盐值才能真正发挥效果。

常见问题

MD5、SHA-1、SHA-256、SHA-512该选哪一种?
如果只是做文件完整性校验,MD5和SHA-1速度快、也够用;但涉及密码存储或安全验证时,应优先选择SHA-256或更安全的SHA-512,因为MD5和SHA-1的抗碰撞性已被攻破,不再适合密码学用途。
什么是HMAC,什么时候需要用它?
HMAC(基于哈希的消息认证码)会结合一个密钥对数据做哈希运算,用来同时验证数据完整性和发送者身份。如果只是单纯计算文本或文件的哈希值,不需要开启HMAC;只有在需要密钥验证的场景(例如API签名校验)时才勾选并输入HMAC密钥。
可以用这个工具生成文件的哈希吗?
可以。点击"选择文件"上传本地文件(最大10MB),工具会在浏览器本地读取文件内容并计算所选算法的哈希值,文件不会被上传到服务器,能够保证隐私安全。
为什么不建议直接用MD5存储密码?
因为MD5计算速度极快,容易被彩虹表或暴力破解手段还原,即便加盐也不够安全。存储密码应使用bcrypt、scrypt、Argon2等专门设计得较慢的哈希函数,以增加破解难度。
哈希值可以被解密还原成原文吗?
不可以。哈希是单向函数,理论上无法从哈希值直接反推出原始数据,只能通过尝试大量可能的输入(如字典攻击、彩虹表)进行匹配比对。原始数据越复杂、盐值越随机,被还原的难度就越大。