MD5 & SHA-256 哈希生成器 — 在线生成与验证文件哈希
即时为任意文本或文件生成 MD5、SHA-1、SHA-256、SHA-384 和 SHA-512 哈希值。使用密钥创建 HMAC 认证码。可在十六进制和 Base64 输出格式之间切换。所有哈希计算均在浏览器本地完成 — 数据不会上传到服务器。
哈希生成器
为文本或文件生成 MD5、SHA-1、SHA-256、SHA-384 和 SHA-512 哈希值。支持 HMAC 认证码。所有处理都在浏览器本地完成。
常见问题
什么是哈希函数?
哈希函数是一种数学算法,接受任意大小的输入并产生称为哈希值、摘要或校验和的固定大小输出。相同的输入始终产生相同的哈希值,即使输入的微小变化也会产生完全不同的输出。哈希函数是单向的——您无法通过哈希值还原原始数据。
MD5和SHA-256有什么区别?
MD5产生128位(32个字符十六进制)哈希值,速度明显更快,但它在密码学上已被攻破——研究人员自2004年起已证明实际碰撞攻击。SHA-256产生256位(64个字符十六进制)哈希值,是由NSA设计的SHA-2家族的一部分。SHA-256没有已知的实际攻击,是包括TLS证书和区块链在内的安全应用的推荐标准。
MD5还安全吗?
不。MD5在密码学上已被攻破,不应用于数字签名、证书验证或密码哈希等安全目的。在现代硬件上,碰撞攻击可在数秒内完成。但MD5对于非安全用途仍然可以接受,例如基本文件校验和以及不关心恶意篡改的数据去重场景。
如何用哈希值验证文件完整性?
下载文件和来源发布的哈希值(通常是SHA-256校验和)。使用本工具的文件上传选项卡生成您下载文件的哈希值。将生成的哈希值与发布的哈希值进行比对——如果完全匹配,则文件是完整的,在传输过程中没有损坏或被篡改。
什么是HMAC,它与普通哈希有什么不同?
HMAC(基于哈希的消息认证码)将哈希函数与密钥结合,生成认证码。与仅验证数据完整性的普通哈希不同,HMAC还可以证明真实性——只有拥有密钥的人才能生成正确的HMAC。HMAC用于API认证(AWS、Stripe)、JWT令牌(HS256=HMAC-SHA256)、TLS握手和Webhook验证。
什么是彩虹表?
彩虹表是预先计算好的查找表,将哈希值映射回原始输入。攻击者使用它们通过在表中查找哈希值来破解密码哈希,而不必暴力尝试每种可能性。彩虹表对未加盐的哈希有效,这就是为什么现代密码存储始终使用加盐(在哈希之前添加随机数据)来抵御彩虹表攻击。
哈希中的盐是什么?
盐是在哈希之前添加到输入中的随机值。每个密码都有唯一的盐,因此即使两个用户有相同的密码,它们存储的哈希值也会不同。加盐防止彩虹表攻击,使预计算不可行。盐与哈希值一起存储——它不需要保密,只需每个密码唯一即可。
为什么要用bcrypt或Argon2而不是SHA-256来存储密码?
SHA-256被设计为快速的,这对密码哈希来说是个缺点——攻击者每秒可以尝试数十亿次猜测。bcrypt、scrypt和Argon2是专门用于密码哈希的函数,故意设计为缓慢且内存密集型。它们包含可配置的工作因子,可以随着硬件改进而增加,使暴力攻击不切实际。
两个不同的输入会产生相同的哈希值吗?
理论上是的——这称为碰撞。由于哈希函数将无限可能的输入映射到有限的输出空间,碰撞必然存在。但对于像SHA-256这样的安全哈希函数,找到碰撞在计算上是不可行的(用当前技术需要数十亿年)。对于像MD5这样已被攻破的算法,碰撞可以在数秒内找到。
使用此工具时,我的数据会离开浏览器吗?
不会。所有哈希计算完全在您的浏览器中使用Web Crypto API和JavaScript进行。您的文本和文件永远不会上传到任何服务器。您可以在断网状态下使用该工具来验证这一点——它的工作效果完全相同。
SHA-512用于什么?
SHA-512产生512位(128个字符十六进制)哈希值,是SHA-2家族的一部分。它用于高安全性应用、数字签名、证书颁发机构,以及作为TLS 1.3等协议的构建块。SHA-512在64位处理器上实际上比SHA-256更快,因为其算法自然地在64位字上运行。它也是SHA-512/256的基础,用于某些加密货币实现中。
如何在电脑上生成文件的MD5或SHA-256哈希值?
在Windows上,打开PowerShell并运行:Get-FileHash -Algorithm SHA256 file.txt(将SHA256替换为MD5)。在macOS/Linux上,使用终端:sha256sum file.txt(Linux)或shasum -a 256 file.txt(macOS)。对于MD5:md5sum file.txt(Linux)或md5 file.txt(macOS)。或者,使用本页面的文件上传选项卡——它完全在您的浏览器中处理文件。
如何在Python或JavaScript中生成哈希值?
在Python中:import hashlib; hashlib.sha256(b"hello").hexdigest()返回SHA-256哈希值。对于MD5:hashlib.md5(b"hello").hexdigest()。在JavaScript(Node.js)中:crypto.createHash("sha256").update("hello").digest("hex")。在浏览器JavaScript中:await crypto.subtle.digest("SHA-256", new TextEncoder().encode("hello")),然后将ArrayBuffer转换为十六进制。
如何在线生成哈希值
密码学哈希函数将任意输入(密码、文件、消息)转换为固定长度的字符串,称为哈希值(也称摘要或校验和)。本工具使用浏览器内置的 Web Crypto API,同时计算 MD5、SHA-1、SHA-256、SHA-384 和 SHA-512 五种哈希值,所有处理均在本地完成,数据不会上传至服务器。
- 选择文本输入选项卡对字符串进行哈希,或选择文件上传对文件进行哈希,或选择 HMAC 生成认证码。
- 输入或粘贴文本,也可将文件拖放到上传区域。
- 五种哈希算法将实时计算,并显示在输入框下方。
- 使用输出格式切换按钮,在小写十六进制、大写十六进制和 Base64 之间切换。
- 点击复制按钮可复制任意哈希值。使用比对区域可验证哈希是否匹配。
MD5 与 SHA-256:应该选择哪种哈希算法?
MD5 和 SHA-256 是搜索量最高的两种哈希算法,但它们在当今的用途截然不同。MD5 由 Ronald Rivest 于 1991 年设计,产生 128 位哈希值。MD5 在密码学上已被攻破——研究人员于 2004 年证明了实际碰撞攻击,2008 年 MD5 被用于伪造流氓 SSL 证书。MD5 不应用于任何安全场景。
SHA-256 是由美国国家安全局(NSA)设计的 SHA-2 家族的一员,产生 256 位哈希值,目前无已知实际攻击。它是 TLS 证书、区块链(比特币使用双重 SHA-256)、数字签名及所有安全敏感应用的推荐标准。SHA-256 比 MD5 慢,但安全性大幅提升。
经验法则: 凡涉及安全的场景一律使用 SHA-256(或 SHA-512)。MD5 仅适用于无安全顾虑的非安全校验场景,如数据去重或兼容遗留系统。
哈希算法对比表
下表对比了本工具支持的五种哈希算法:
| 算法 | 输出大小 | 安全状态 | 速度 | 主要用途 |
|---|---|---|---|---|
| MD5 | 128 位(32 位十六进制) | 已被攻破 | 非常快 | 仅限遗留校验和 |
| SHA-1 | 160 位(40 位十六进制) | 已废弃 | 快 | 遗留系统、Git(过渡中) |
| SHA-256 | 256 位(64 位十六进制) | 安全 | 中等 | TLS 证书、区块链、通用场景 |
| SHA-384 | 384 位(96 位十六进制) | 安全 | 中等 | 政府及高安全性应用 |
| SHA-512 | 512 位(128 位十六进制) | 安全 | 64 位处理器上较快 | 最高安全性、大数据完整性 |
如何用哈希值验证文件完整性
软件发行商通常会在下载文件旁提供 SHA-256 校验和,方便用户验证文件在传输过程中是否被损坏或篡改。使用本工具进行验证的步骤如下:
- 下载文件,并记录官方来源发布的哈希值(通常是 SHA-256)。
- 切换到文件上传选项卡,将下载的文件拖放到上传区域。
- 从结果中复制生成的 SHA-256 哈希值。
- 将官方发布的哈希值粘贴到比对哈希区域——若显示"匹配",则文件完整可信。
也可以通过命令行验证文件哈希:Windows 使用 certutil -hashfile file.zip SHA256,Linux 使用 sha256sum file.zip,macOS 使用 shasum -a 256 file.zip。
HMAC 是什么?它的工作原理是什么?
HMAC(基于哈希的消息认证码)将密码学哈希函数与密钥结合,生成认证码。与普通哈希不同,HMAC 同时证明消息的完整性和真实性——只有持有密钥的人才能生成正确的 HMAC。
HMAC 定义于 RFC 2104:HMAC(K, m) = H((K ⊕ opad) || H((K ⊕ ipad) || m)),其中 H 是哈希函数,K 是填充至块大小的密钥,ipad/opad 是固定填充常量(0x36 和 0x5c)。
HMAC 广泛应用于 TLS/SSL 握手、API 认证(AWS Signature V4、Stripe Webhook)、JWT 令牌签名(HS256 即 HMAC-SHA256)、OAuth 1.0 请求签名以及 IPsec VPN 认证。使用本工具的 HMAC 选项卡,可用五种支持的算法生成 HMAC 值。
各编程语言中的哈希生成示例
以下是在常用编程语言中生成 SHA-256 哈希值的快速参考示例:
| 语言 | SHA-256 代码示例 |
|---|---|
| Python | hashlib.sha256(b"hello").hexdigest() |
| JavaScript | crypto.subtle.digest("SHA-256", data) |
| PHP | hash("sha256", "hello") |
| Java | MessageDigest.getInstance("SHA-256").digest(bytes) |
| C# | SHA256.HashData(Encoding.UTF8.GetBytes("hello")) |
| Go | sha256.Sum256([]byte("hello")) |
| Bash | echo -n "hello" | sha256sum |
| PowerShell | Get-FileHash -Algorithm SHA256 file.txt |
对于 MD5,相应替换算法名称即可:Python 使用 hashlib.md5(),PHP 使用 hash("md5", ...),C# 使用 MD5.HashData()。大多数语言通过标准加密库提供内置的哈希函数。
哈希的常见应用场景
- 文件完整性验证 — 将文件哈希值与发行商提供的校验和进行比对,检测损坏或篡改
- 密码存储 — 现代系统使用 bcrypt 或 Argon2 等专用算法存储加盐密码哈希,绝不明文存储
- 数字签名 — 对文档进行哈希后,用私钥对哈希值签名,以验证真实性
- 区块链与加密货币 — 比特币使用双重 SHA-256,以太坊使用 Keccak-256,每个区块通过哈希值链接到前一个区块
- 数据去重 — 哈希值可快速识别重复文件,无需逐字节比较
- 内容寻址 — Git 使用 SHA-1(正在迁移至 SHA-256),IPFS 和 Docker 以 SHA-256 作为内容标识符
- API 认证 — HMAC-SHA256 用于 AWS、Stripe 及众多 Webhook 系统的 API 请求认证
- SRI(子资源完整性) — 浏览器通过
integrity属性中的 Base64 编码 SHA-384 哈希值验证 CDN 托管的脚本
深入了解哈希函数
- 密码学哈希函数详解——MD5 vs SHA-256 vs SHA-512 — 深入讲解哈希函数内部原理、碰撞攻击、使用 bcrypt/Argon2 进行密码哈希,以及在区块链和 TLS 中的实际应用
相关工具
- Base64 编码/解码 — 以 Base64 格式对数据进行编码和解码,常与哈希结合用于 SRI 和 JWT
- 十六进制转文本转换器 — 将十六进制哈希输出转换为可读文本或原始字节
- 十六进制转二进制转换器 — 将哈希十六进制字符串转换为二进制表示
- URL 编码/解码 — 对 URL 中的特殊字符进行百分号编码,常用于通过查询参数传递哈希值
- 二进制翻译器 — 使用 ASCII/UTF-8 编码在二进制和文本之间相互转换
- 凯撒密码 — 探索经典密码学的基础知识