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

Hash 算法 SHA-1、SHA-256、SHA-384、SHA-512 对比

JavaScript 实现

在线 JavaScript Hash 工具:
https://nanojs.net/tool/hash/sha-256
(通过 Web Crypto API 在浏览器端实现 hash 算法,无后台,隐私安全)

JavaScript Web Crypto API 实现 Hash

// 转为 16 进制
const bufferToHex = (buffer) => {const byteArray = new Uint8Array(buffer);return Array.from(byteArray).map(byte => byte.toString(16).padStart(2, '0')).join('');
};const textInput = "hello";
const encoder = new TextEncoder();
const data = encoder.encode(textInput);const hashAlgorithm = "SHA-256"; // 还支持 SHA-1 SHA-384 SHA-512
const hashBuffer = crypto.subtle.digest(hashAlgorithm, data);
const hashHex = bufferToHex(hashBuffer);

特性对比

特性SHA-1SHA-256SHA-384SHA-512
输出长度160 位 (20 字节)256 位 (32 字节)384 位 (48 字节)512 位 (64 字节)
输入分块大小512 位512 位1024 位1024 位
迭代轮数80648080
内部状态5 × 32 位字8 × 32 位字8 × 64 位字8 × 64 位字
安全性已被攻破(可生成碰撞)安全(暂无实际碰撞)非常安全(基于 SHA-512 截断)非常安全(无已知弱点)
性能表现速度快,安全性差安全性与性能平衡良好在 64 位系统上效率高在 64 位系统上效率高
常见用途旧系统、非安全校验TLS、区块链、文件校验高安全签名、HMAC高安全需求、长摘要、HMAC
当前状态已弃用推荐使用推荐高安全场景使用推荐高安全场景使用

安全性 (最重要的区别)

  • SHA-1 (不安全) :

    • 已于 2005年 被密码学家从理论上证明其抗碰撞性不足。
    • 2017年,谷歌成功实施了 SHAttered 攻击,公开演示了制造两个具有相同 SHA-1 哈希值的不同 PDF 文件,正式宣告其被实际攻破。
    • 结论:绝对不能再用于任何安全相关的用途,如数字证书、密码散列或完整性验证。
  • SHA-256 / SHA-384 / SHA-512 (安全) :

    • 同属于 SHA-2 家族,目前尚未有任何成功的攻击方法能威胁到其核心安全性。
    • 它们的抗碰撞性基于其输出长度(256位、384位、512位),在可预见的未来(即使量子计算机出现)都是安全的。
    • SHA-256 是目前行业内的黄金标准最广泛采用的算法。
    • SHA-384SHA-512 提供更高的安全边际,适用于对安全寿命要求极高的场景。

输出长度与抗碰撞性

  • 输出长度直接决定了哈希空间的“大小”,是抗碰撞性的基础。

  • 生日攻击 理论指出,找到碰撞大约需要尝试 2^(n/2) 次,其中 n 是输出位数。

    • SHA-1 (n=160) : 理论上需要 ~2⁸⁰ 次尝试,但已被更高效的方法攻破。
    • SHA-256 (n=256) : 需要 ~2¹²⁸ 次尝试,在计算上不可行。
    • SHA-384 (n=384) : 需要 ~2¹⁹² 次尝试,极其安全。
    • SHA-512 (n=512) : 需要 ~2²⁵⁶ 次尝试,目前最顶级的安全性。

性能考虑

  • SHA-1 因其设计简单,计算速度最快,但因其不安全,速度优势已无意义。

  • SHA-256 在 32 位和 64 位系统上都有良好的性能表现,是安全与效率的完美平衡。

  • SHA-384SHA-512 内部使用 64 位字进行计算。

    • 64 位 CPU 上,SHA-512 的速度通常比 SHA-256 更快,因为它能更高效地处理更大的数据块。
    • 在 32 位 CPU 上,它们通常会慢一些。

兼容性与应用

  • SHA-1: 仅存在于旧系统、旧协议中(如旧版 Git),用于向后兼容。所有现代安全标准已强制要求弃用。

  • SHA-256: 无处不在。是大多数应用的首选:

    • 比特币 和许多其他加密货币的挖矿和交易验证。
    • TLS/SSL 证书 的标准算法。
    • 软件更新包的完整性校验。
    • 密码散列(通常与盐值 Salt 结合使用)。
  • SHA-384 / SHA-512: 用于需要更高安全级别的特定场景:

    • 某些政府机构和军事应用的标准要求。
    • 保护极其敏感或需要长期(数十年)安全的数据。

如何选择?—— 实践指南

  1. 对于所有新项目和安全应用

    • 首选 SHA-256。它提供了最佳的安全性和广泛支持的平衡,是事实上的标准。
  2. 对于有更高安全要求或遵循特定标准的情况

    • 选择 SHA-384SHA-512。例如,SHA-384 是 FIPS 180-4 标准中推荐用于保护 128 位安全级别的算法。
  3. 绝对禁止

    • 永远不要 在新的项目中使用 SHA-1 用于安全目的。如果遇到旧系统在使用,应制定计划立即迁移到 SHA-2 家族。
  4. 性能考量

    • 如果在 64 位服务器上进行大量哈希计算,测试一下 SHA-512,它可能比 SHA-256 更快。

示例

对字符串 "hello" 进行哈希计算的结果:

算法哈希值 (十六进制)
SHA-1aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
SHA-2562cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-38459e1748777448c69de6b800d7a33bbfb9ff1b463e44354c3553bcdb9c666fa90125a3c79f90397bdf5f6a13de828684f
SHA-5129b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043

结论

对于绝大多数情况,使用 SHA-256 就对了。它是安全、高效且行业公认的标准。如果需要更安全的算法可以用 SHA-384 SHA-512

总结:

  • SHA-1 已经不安全,仅适合非安全校验或兼容旧系统。
  • SHA-256 是目前最常用的安全哈希算法,性能和安全性均衡。
  • SHA-384 基于 SHA-512,提供更长摘要,适合高安全需求。
  • SHA-512 在 64 位平台上性能优异,适合需要最高安全性的应用。
http://www.xdnf.cn/news/19639.html

相关文章:

  • SpringBoot3 + Netty + Vue3 实现消息推送(最新)
  • 食品分类案例
  • 码住!辉芒微MCU型号规则详细解析
  • Kafka 架构详解
  • 动子注册操作【2025.9.2学习记录】
  • MVP架构深层剖析-从六大设计原则的实现角度到用依赖注入深度解耦
  • Elasticsearch 核心知识与常见问题解析
  • MCU上跑AI—实时目标检测算法探索
  • 【 HarmonyOS 6 】HarmonyOS智能体开发实战:Function组件和智能体创建
  • 空间不足将docker挂载到其他位置
  • 03_网关ip和端口映射(路由器转发)操作和原理
  • 梯度消失问题:深度学习中的「记忆衰退」困境与解决方案
  • React 学习笔记4 Diffing/脚手架
  • 2025了,你知道electron-vite吗?
  • 网络原理——HTTP/HTTPS
  • ImageMagick命令行图片工具:批量实现格式转换与压缩,支持水印添加及GIF动态图合成
  • 2条命令,5秒安装,1秒启动!Vite项目保姆级上手指南
  • 鸿蒙NEXT界面交互全解析:弹出框、菜单、气泡提示与模态页面的实战指南
  • 开源的聚合支付系统源码/易支付系统 /三方支付系统
  • Erlang 利用 recon 排查热点进程
  • 人工智能之数学基础:分布函数对随机变量的概率分布情况进行刻画
  • 微信小程序 navigateTo 栈超过多层后会失效
  • 在 Delphi 5 中获取 Word 文档页数的方法
  • 小程序蓝牙低功耗(BLE)外围设备开发指南
  • 365 天技术创作手记:从一行代码到四万同行者的相遇
  • C++多线程编程:std::thread, std::async, std::future
  • Jenkins Pipeline 语法
  • 第 12 篇:网格边界安全 - Egress Gateway 与最佳实践
  • python中的zip() 函数介绍及使用说明
  • 基于Spark的新冠肺炎疫情实时监控系统_django+spider