哈希/加密工具
支持MD5、SHA-1、SHA-256、SHA-512等多种哈希算法,文本和文件哈希计算
拖放文件到此处或点击选择
支持任意类型的文件
什么是哈希计算工具?
哈希计算工具是一种将任意长度的输入数据转换为固定长度哈希值(散列值)的在线工具。哈希函数是信息安全的基石之一,它将消息映射为唯一的"数字指纹"。即使输入数据只改变一个字符,输出的哈希值也会完全不同(雪崩效应)。常见哈希算法包括MD5(128位,已不安全)、SHA-1(160位,逐渐淘汰)、SHA-256(256位,目前主流)和SHA-512(512位,高安全需求)。开发者常用哈希值进行文件完整性校验、密码存储、数据去重、数字签名等。本工具支持多种哈希算法,输入文本或上传文件即可获得对应的哈希值。
如何使用哈希计算工具
- 输入数据 — 输入需要计算哈希的文本内容,或上传文件。
- 选择算法 — 从MD5、SHA-1、SHA-256、SHA-512等算法中选择一种或多种。
- 获取哈希值 — 工具立即计算并显示各算法对应的哈希值,支持一键复制。
常见使用场景
场景一:文件完整性校验
下载文件后计算其SHA-256值,与发布者提供的哈希值对比,确认文件在传输过程中未被篡改。
场景二:密码存储设计
了解不同哈希算法的输出格式和安全性,为系统设计合理的密码存储方案(注意:密码存储应使用bcrypt等专用算法)。
场景三:数据去重
对大量数据计算哈希值,通过比较哈希值快速发现重复内容,无需逐字节比较原始数据。
技术原理
哈希函数的核心特性:
// 哈希函数基本特性
// 1. 确定性:相同输入总是产生相同输出
// 2. 快速计算:任意长度输入都能快速得到输出
// 3. 不可逆:无法从哈希值推导原始输入
// 4. 雪崩效应:输入微小变化导致输出巨大变化
// 5. 抗碰撞:很难找到两个不同输入产生相同输出
// 各算法输出长度
// MD5: 128位 = 32个十六进制字符
// SHA-1: 160位 = 40个十六进制字符
// SHA-256: 256位 = 64个十六进制字符
// SHA-512: 512位 = 128个十六进制字符
// Web Crypto API 使用示例
async function sha256(message) {
const msgBuffer = new TextEncoder().encode(message);
const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);
return Array.from(new Uint8Array(hashBuffer))
.map(b => b.toString(16).padStart(2, '0')).join('');
}
最佳实践与注意事项
- MD5和SHA-1已被证明存在碰撞漏洞,不要用于安全敏感场景(如密码存储、数字签名)。
- 密码存储应使用bcrypt、scrypt或Argon2等慢速哈希函数,而非SHA-256。
- 文件哈希校验时注意文件编码——换行符差异(CRLF vs LF)会导致哈希值不同。
- 哈希值通常用十六进制表示,也有Base64表示形式,注意区分。
常见问题
Q:MD5还安全吗?
A:不安全。MD5已被证明存在碰撞攻击,可以在合理时间内找到两个不同输入产生相同MD5值。不要将MD5用于安全用途(如密码存储、签名验证),仅可用于非安全的校验和场景。
Q:哈希和加密有什么区别?
A:哈希是单向的,不可逆——无法从哈希值还原原始数据。加密是双向的,有密钥就可以解密。哈希用于完整性校验和密码存储,加密用于数据保密传输。
Q:SHA-256和SHA-512哪个更安全?
A:SHA-512理论安全性更高(更长的输出意味着更大的碰撞空间),但SHA-256在实际应用中已经足够安全。在32位系统上SHA-512可能比SHA-256慢。
Q:为什么同样的文本在不同工具中哈希值不同?
A:可能是编码差异(UTF-8 vs UTF-16)或换行符差异(\n vs \r\n)。确保所有工具使用相同的输入编码格式。
Q:如何验证下载文件的完整性?
A:下载文件后,使用本工具或命令行(如sha256sum)计算文件的SHA-256值,与官方发布的哈希值逐字符对比。完全一致说明文件未被篡改。