哈希计算
用浏览器原生 WebCrypto 计算 SHA 系列摘要——不需要联网,内容不会离开本机。
浏览器原生 WebCrypto 不提供 MD5(它已被认为不安全,浏览器厂商主动移除了支持)。如果你需要 MD5,得引入第三方实现,本站为了「零第三方代码」没有这样做。
什么时候用
- 要拿一段文本(API key、许可证内容、配置片段)的 SHA-256 指纹,和对方邮件或发布页给出的校验值逐字符比对,确认两边内容一字不差。
- 同一份内容要同时以 HEX 和 Base64 交付:一个系统存十六进制、另一个接口收 Base64,一次计算就能拿到两列,不用自己转换。
什么时候不用
- 要校验下载的安装包、图片或压缩包:这里只对文本框里的 UTF-8 文本做摘要,读不到二进制文件,请用 shasum -a 256、certutil -hashfile 或系统自带的校验界面。
- 对方指定 MD5(老接口签名、部分 CDN 的 ETag、历史校验值):WebCrypto 不提供 MD5,本工具也不会算,得在本地跑 md5sum 或 openssl dgst -md5。
摘要由浏览器 WebCrypto 本地计算,输入不上传、不写日志。限制:只有 SHA-1/256/384/512,无 MD5;输入按 UTF-8 处理,无法摘要二进制文件,也无流式处理;SHA-1 已不抗碰撞;没有 HMAC 与加盐。
常见问题
为什么不提供 MD5?
因为浏览器不提供。WebCrypto 的 digest 只支持 SHA-1/256/384/512,MD5 从未进入标准;个别浏览器早期提供过非标准支持,后来也移除了。用 JS 手写实现不仅慢,还要自己保证没有实现错误。更重要的是 MD5 的碰撞早已可以工程化构造,不该再用于签名或完整性校验。确实需要时请用本地命令行:md5sum、md5 或 openssl dgst -md5,别在网页里找替代品。
哈希能还原成原文吗?
不能。摘要是单向的,输出长度固定,原文信息已经丢失,唯一的办法是穷举候选再比对。但「不能还原」不等于「安全」:密码、低熵口令、手机号这类可枚举的输入,用彩虹表、字典和 GPU 暴力在很短时间内就能反查出来。所以密码存储要用 bcrypt、scrypt 或 Argon2 这类带盐且故意变慢的算法,直接存 SHA-256 算不上密码哈希。
SHA-1 还能用吗?
看用途。SHA-1 的碰撞已经可以实际构造出来(SHAttered 及后续工作),签名、证书、防篡改场景一律不该再用。Git 的对象 ID 这类遗留用途还在跑,但新设计应该直接选 SHA-256。本工具保留 SHA-1 只是为了核对历史校验值,不代表推荐。另外它和所有裸哈希一样挡不住长度扩展攻击,需要密钥参与时用 HMAC。