哈希值生成与校验
文本和文件的 MD5、SHA-1、SHA-256、SHA-384、SHA-512 一次算齐。下载完的文件对一下校验值,确认没被篡改。全程本地计算,数据不出浏览器。
- 算法
- MD5 · SHA-1/256/384/512
- 引擎
- Web Crypto API
- 隐私
- 100% 本地
- 输入
- 文本 / 文件
拖拽文件到这里,或点击选择
本地读取文件字节计算校验值,文件不会上传。安装包、镜像、压缩包都能验。
FEATURES
一个页面算齐五种哈希
从快速指纹到安全签名,开发、运维、校验下载时要用到的哈希值都在这里。
五种算法
MD5、SHA-1、SHA-256、SHA-384、SHA-512 同屏展示,标注输出位数,不用再来回切换工具。
实时计算
文本边输边算,无需点按钮;结果等宽字体展示,点击整行即可复制。
文件完整性校验
拖入安装包、镜像或压缩包,直接读出官方校验值,确认下载没有损坏或被篡改。
本地计算,零上传
SHA 家族走浏览器内置 Web Crypto API,文本和文件都不离开本机,敏感内容也能放心算。
UTF-8 一致
文本统一按 UTF-8 字节计算,结果与 md5sum、PHP md5()、Python hashlib 完全一致。
一键复制
每种哈希单独复制,或一键按标准校验和格式复制全部,直接粘贴到终端比对。
关于哈希值,你需要知道的
原理不复杂,但用错场景会出安全问题。
MD5 和 SHA-1 到底是什么?
MD5(Message-Digest Algorithm 5,消息摘要算法第五版)是 MIT 教授 Ronald Rivest 1991 年设计、1992 年以 RFC 1321 发布的哈希算法,输出固定 128 位(32 个十六进制字符)摘要,是 MD4 的继任者。SHA-1 由美国国家安全局(NSA)设计、1995 年作为联邦标准 FIPS 180-1 发布,输出 160 位。两者曾是二十年间使用最广的哈希算法——文件校验、密码存储、数字签名、Git 提交 ID 都基于它们。注意:今天它们仍能算出正确的摘要,「不安全」指的是抗碰撞能力被攻破,而不是计算结果会出错。
哈希、加密、编码是一回事吗?
不是,三者解决完全不同的问题。编码(如 Base64、URL Encode)是可逆的格式转换,任何人都能还原,不提供任何安全性;加密是可逆的,用密钥把明文变成密文,持有正确密钥的人可以解密;哈希是单向的,没有密钥,也无法从摘要还原原文,用于指纹、完整性校验和数字签名。两个常见误区:把 Base64 当作「加密」,以及把「给密码算 MD5」说成「加密密码」——那只是哈希,而且是不安全的用法。
哈希值为什么不能反推出原文?
哈希是单向函数:任意长度的输入被压缩成固定长度的摘要,过程中大量信息被「折叠」丢弃。就像无法从一句话的字数还原这句话本身一样,理论上无法从哈希值反推原文。安全算法的设计目标就是让这种逆向在计算上不可行。
MD5 和 SHA-1 还能用吗?
用于「校验文件有没有在传输中损坏」依然够用——意外的字节改动几乎必然改变 MD5。但绝不能用于安全场景:MD5 和 SHA-1 的碰撞攻击早已实用化(研究者能用可控内容构造相同 MD5 的两个文件),密码存储、数字签名、证书都应使用 SHA-256 及以上。
同一段文字,为什么这里和别的工具结果不一样?
最常见的原因有三个:① 字符编码不同(本工具统一按 UTF-8,部分老工具按 GBK 或 Latin-1);② 尾部多了换行符,命令行 echo 默认会在末尾加 \n(用 echo -n 可避免);③ 复制时混入了空格或不可见字符。哈希对每个字节都敏感,差一个字节结果就完全不同。
密码为什么不能直接存 MD5/SHA-256?
普通哈希算得太快,攻击者拿到泄露的哈希库后可以每秒穷举几十亿次,彩虹表也能直接反查常见密码。密码必须用专门的慢哈希算法(bcrypt、scrypt、Argon2)并加盐,让每次验证都故意慢且耗内存,暴力破解成本高到不现实。
怎么验证下载文件的完整性?
在官网找到文件公布的校验值(通常是 SHA-256),把下载好的文件拖进本工具的「文件校验」标签,再把官方校验值粘贴到结果区上方的输入框——工具会按长度自动识别算法,匹配的那一行变绿即说明文件字节与官方发布的完全一致;变红则可能下载损坏或被中间人替换,不要运行。
五种算法怎么选
按场景选,越新的算法输出越长、抗攻击越强,计算也稍慢。
| 算法 | 诞生 | 输出长度 | 安全性 | 典型用途 |
|---|---|---|---|---|
| MD5 | 1992 | 128 位(32 字符) | 已被攻破,可碰撞 | 非安全场景的文件指纹、去重、兼容老系统 |
| SHA-1 | 1995 | 160 位(40 字符) | 2017 年碰撞实用化 | Git 历史标识等遗留系统,不应用于新安全场景 |
| SHA-256 | 2001 | 256 位(64 字符) | 目前安全 | 文件校验、数字签名、TLS 证书、区块链,最通用 |
| SHA-384 | 2001 | 384 位(96 字符) | 安全 | SHA-512 的截断版,合规要求 384 位时使用 |
| SHA-512 | 2001 | 512 位(128 字符) | 安全 | 高安全等级签名,64 位 CPU 上常比 SHA-256 更快 |
「安全」指截至目前没有公开的实用碰撞攻击;密码存储无论选哪个都应改用 bcrypt/Argon2。
checksum(校验和):下载的文件到底怎么验
下载页上那串 MD5、SHA-256 值到底有什么用、怎么对、用什么对——这一节一次讲清。
为什么要校验
下载到手的文件和服务器上的原文件未必是同一份。花十秒钟对一下校验值,能挡掉三类麻烦:
大文件经过断点续传、不稳定网络,个别字节出错并不罕见;装上残缺的安装包,排查起来远不止十秒。
很多软件实际从镜像站或 CDN 下载,同步延迟、缓存异常时,拿到的可能是旧版甚至半个文件。
下载源被入侵、公共网络被劫持时,文件可能被植入后门。2016 年 Linux Mint 官网被黑,下载链接被替换成带后门的镜像,官方事后第一件事就是呼吁所有用户核对 checksum。
什么是 checksum
发布方在服务器上对文件算一次哈希,把结果公布在下载页;你下载完在本地再算一次,两串值逐字符相同,就说明文件字节与官方发布的完全一致——既没损坏,也没被替换。校验对每个字节都敏感:哪怕只改动一个字节,算出来的值也会面目全非。广义的 checksum 还包括 CRC32 这类更简单的算法,只能发现意外损坏;而 MD5/SHA 这类密码学哈希还能抵御人为伪造,安全性更高。
三步校验一个文件
-
1
拿到官方校验值
在文件下载页找到官网公布的 MD5 / SHA-256 值(常写作 checksum、校验和或 .sha256 附件文件),复制整串。
-
2
拖入文件并粘贴
切到本页「文件校验」标签,把下载好的文件拖进来,再把校验值粘贴到结果区上方的输入框。
-
3
看颜色下结论
工具按长度自动识别算法:变绿即文件与官方完全一致,可放心使用;变红则可能下载损坏或被篡改,不要运行。
看懂官网的校验值
各家下载页的写法五花八门,但都离不开「哈希值 + 文件名」两个要素。下面三种是最常见的形态,粘贴时只取哈希值部分即可(本工具会自动忽略空格和换行):
# 1. 单行:只有一个值
a0570aa01532917be820a37994710cf09b6eba198bf9543c27be938c5f09e60a
# 2. sha256sum 格式:值 + 两个空格 + 文件名(SHA256SUMS 清单就是多行这种)
a0570aa01532917be820a37994710cf09b6eba198bf9543c27be938c5f09e60a ubuntu-24.04.iso
# 3. BSD 格式:算法 (文件名) = 值
SHA256 (ubuntu-24.04.iso) = a0570aa01532917be820a37994710cf09b6eba198bf9543c27be938c5f09e60a
MD5 还是 SHA-256
官网给什么就验什么,但如果可以自己选:防「传输中意外损坏」MD5 完全够用(意外改动几乎必然改变 MD5);要防「有人故意掉包文件」(安全软件、证书、签名包),必须用 SHA-256 或更强——MD5 的碰撞攻击早已实用化,攻击者可以构造出 MD5 相同、内容不同的两个文件。这段历史见下方「安全小史」。
不用浏览器时的校验命令
Linux 和 macOS 的校验工具支持 -c 参数直接核对清单文件,无需人工比对;Windows 自带命令只能算出值,再与官网字符串比对。
| 环境 | 校验命令 |
|---|---|
| Linux | sha256sum -c SHA256SUMS (自动核对清单里的每个文件) |
| macOS | shasum -a 256 -c checksum.txt |
| 单个值快速核对 | echo "官网值 文件名" | sha256sum -c - (输出 OK 即通过) |
| Windows | 先 Get-FileHash 文件名 -Algorithm SHA256 算出,再与官网值比对 |
安全小史:MD5 是如何被攻破的
MD5 不是一夜之间失效的——从学界发现裂缝,到真实世界伪造证书,用了二十年。
-
1992
MD5 发布
Ronald Rivest 在 RFC 1321 中公布 MD5。它算得快、实现简单、任意输入都输出 128 位摘要,迅速成为文件校验和密码存储的事实标准。此时它被认为在密码学上是安全的。
-
2004
王小云团队公开 MD5 完整碰撞
在 CRYPTO 2004 会议上,中国数学家王小云团队展示了对 MD5 的完整碰撞攻击——能构造出哈希值相同、内容不同的两个文件(最初约需 IBM P690 超级计算机一小时,改进后在普通电脑上只需几秒)。MD5 的「抗碰撞性」从理论承诺变成了空谈,全场起立鼓掌成为密码学史上的名场面。
-
2008
伪造证书:碰撞第一次威胁真实互联网
Marc Stevens、Alexander Sotirov 等人用「选择前缀碰撞」伪造出一张受浏览器信任的中级 CA 证书:不同前缀的证书签名却相同。这意味着攻击者可以给任意假冒网站签发「合法」HTTPS 证书。事件之后证书机构全面停止签发 MD5 证书。
-
2012
Flame 病毒借 MD5 攻击 Windows
国家级恶意软件 Flame(火焰)利用 MD5 碰撞,让微软的终端服务授权服务器为一张伪造的代码签名证书背书,借此伪装成微软签名的更新在中东多国传播。这是 MD5 碰撞第一次被用于真实的网络攻击,微软事后紧急补丁吊销了相关证书。
-
2017
SHAttered:SHA-1 正式告破
Google 与荷兰 CWI 研究所(Marc Stevens 等)发布两个内容不同、SHA-1 却完全相同的 PDF,攻击消耗约 6500 个 CPU 年和 110 个 GPU 年。各大浏览器随后彻底移除 SHA-1 证书信任,Git 平台也加速弃用 SHA-1,160 位时代落幕。
需要强调:碰撞攻击不能「破解任意一个已有文件」的哈希,而是构造两个特定文件使其哈希相同——但在签名、证书这类场景下,这已经足以构成致命伪造。
命令行里怎么算哈希
不方便用浏览器时,各系统自带命令即可计算(以 SHA-256 为例)。
| 环境 | 命令 |
|---|---|
| Linux / macOS | sha256sum 文件名 (macOS 也可用 shasum -a 256 文件名) |
| Windows PowerShell | Get-FileHash 文件名 -Algorithm SHA256 |
| Windows CMD | certutil -hashfile 文件名 SHA256 |
用代码计算哈希
写脚本或调接口时,四种常用语言的最小示例。
async function sha256Hex(data) {
const bytes = typeof data === "string"
? new TextEncoder().encode(data)
: new Uint8Array(data);
const digest = await crypto.subtle.digest("SHA-256", bytes);
return [...new Uint8Array(digest)]
.map((b) => b.toString(16).padStart(2, "0"))
.join("");
}
// Text
console.log(await sha256Hex("hello"));
// Files: digest accepts an ArrayBuffer directly
const buf = await file.arrayBuffer();
console.log(await sha256Hex(buf));
浏览器原生 Web Crypto 只支持 SHA 家族,且页面需为 HTTPS 或 localhost;MD5 需第三方库。
echo hash('sha256', 'hello'); // 64 hex characters
echo md5('hello'); // same as hash('md5', 'hello')
// Streamed: hashes the file without loading it into memory
echo hash_file('sha256', 'setup.exe');
hash() 与 hash_file() 支持 md5、sha1、sha256、sha512 等算法;算文件用流式读取,不占内存。
import hashlib
print(hashlib.sha256(b"hello").hexdigest())
print(hashlib.md5(b"hello").hexdigest())
# Large files: streamed, low memory (Python 3.11+)
with open("setup.exe", "rb") as f:
print(hashlib.file_digest(f, "sha256").hexdigest())
标准库 hashlib 无需安装;大文件用 file_digest() 流式计算(Python 3.11+)。
use sha2::{Digest, Sha256};
use md5::Md5;
// Text
println!("{:x}", Sha256::digest(b"hello"));
println!("{:x}", Md5::digest(b"hello"));
// Large files: streamed, low memory
let mut file = std::fs::File::open("setup.exe")?;
let mut hasher = Sha256::new();
std::io::copy(&mut file, &mut hasher)?;
println!("{:x}", hasher.finalize());
哈希不在标准库,需在 Cargo.toml 引入 RustCrypto 的 sha2、md-5;开启 std 特性后可用 io::copy 流式算文件。
常见问题
输入的文本和文件会被上传吗?
不会。所有计算都在你的浏览器内完成:SHA 家族调用浏览器内置的 Web Crypto API,MD5 在页面 JavaScript 中计算。断网后工具依然可用,可以用敏感文件自行验证。
为什么空文本也有哈希值?
哈希算法对「零字节输入」也有唯一且固定的输出。例如空字符串的 MD5 是 d41d8cd98f00b204e9800998ecf8427e,SHA-256 是 e3b0c442...b855。不过本工具在输入为空时不显示结果,避免误复制。
多大的文件都能算吗?
取决于浏览器可用内存,几百 MB 的安装包和镜像通常没问题。文件需要被一次性读入内存,特别大的文件(数 GB)建议用命令行工具(sha256sum、certutil)计算。
哈希值为什么有长有短?
输出长度由算法决定:MD5 是 32 个十六进制字符,SHA-1 是 40 个,SHA-256 是 64 个,SHA-512 是 128 个。每两个字符代表一个字节,长度与输入文件大小无关——一个字节和几个 GB 的文件,SHA-256 都是 64 位字符。
可以用来生成 API 签名吗?
可以。很多开放平台用 MD5 或 SHA-256 对「参数+密钥」拼接串签名做请求验签。本工具适合调试时快速核对签名值;生产代码里应在服务端使用语言自带的哈希库,不要在前端暴露密钥。
怎么用这个工具比对 checksum?
切到「文件校验」标签并拖入文件,把官网公布的校验值粘贴到结果区上方的输入框即可。工具会按长度自动识别算法(32 位 MD5、40 位 SHA-1、64 位 SHA-256、96 位 SHA-384、128 位 SHA-512),一致时对应行变绿并提示「校验通过」,不一致则变红。校验值的大小写、首尾空格和换行会自动忽略,不用手动整理。
相关工具
编码、加密与密码相关的其它工具。