SHA-256与SHA-512计算器
用纯 JavaScript 同步实现 SHA-256 与 SHA-512 分组压缩算法,输入文本按 UTF-8 计算摘要,可输出小写十六进制或 Base64 形式,附带前 8 位短哈希、输入字节数、填充分块细节与空串自检向量,无需 https 环境。
数据来源:FIPS PUB 180-4(Secure Hash Standard)SHA-256 / SHA-512 算法与填充规则
分组压缩与填充细节
| 项目 | 值 | 说明 |
|---|---|---|
| 分组(block)长度 | 64 字节 | SHA-256 以 512 位为一组 |
| 消息轮数 | 64 轮 | 每组压缩函数的迭代次数 |
| 工作字长 | 32 位(位运算实现) | SHA-512 需要 64 位加法与循环右移 |
| 填充后总长度 | 64 字节 | 追加 0x80、若干 0x00,末尾放消息比特长度 |
| 处理分组数 | 1 | 至少处理 1 个分组(空输入也要填充计算) |
| 比特长度字段 | 64 位 | 按大端写入,本工具输入长度上限 20 万字符不会溢出 |
| 空串自检向量 | e3b0c44298fc1c149afbf4c8… | 本次运行结果与 FIPS 180-4 标准值一致 |
ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
算法为纯 JavaScript 同步实现(按 FIPS 180-4 手写分组压缩),不依赖 Web Crypto 的 crypto.subtle,因此在本站以 file:// 打开或 http 访问时同样可用,且 Node 环境结果一致。哈希是单向的,无法从摘要还原原文;文本内容短时可用彩虹表或暴力字典反查,所以存储登录口令应使用 bcrypt / argon2 等带盐慢哈希,而不是直接用 SHA-256。
本页所有计算在浏览器内完成,输入内容不会被上传。
计算口径
按 FIPS 180-4:先把输入按 UTF-8 编码成字节,追加 1 个 0x80 字节与若干个 0x00,使总长度对 512 位(SHA-256)或 1024 位(SHA-512)同余于 448/896,最后写入 64/128 位的大端消息比特长度。每个分组扩展出消息调度字(SHA-256 为 64 个 32 位字,SHA-512 为 80 个 64 位字),再做对应轮数的压缩函数迭代,与初始哈希值相加得到摘要。初始值与轮常量取自前若干个质数平方根、立方根的无理数小数部分。
使用说明
- 校验下载文件时把文件内容或文本粘贴进来,对比官方公布的十六进制摘要
- 做接口签名时通常要求小写 hex,输出形式选"十六进制(小写)"再取用
- 只需展示前缀或做缓存键时用"前 8 位短哈希"
常见问题
同样内容为什么别的工具算出的 SHA-256 不一样?
几乎总是编码差异:中文按 UTF-8 与按 GBK 编码的字节完全不同,摘要也就不同;另外是否包含末尾换行、是否被剪贴板自动加了空格都会改变结果。本工具统一按 UTF-8 且不额外补换行。
为什么不用浏览器自带的 crypto.subtle?
crypto.subtle 只在安全上下文(https 或 localhost)可用,而且是异步接口,本站要求工具函数纯同步、本地文件双击打开也要能算,因此手写实现了标准算法,并用 FIPS 公布的空串向量做自检。
SHA-256 和 SHA-512 选哪个?
安全强度两者都足够,SHA-512 摘要更长(128 个十六进制字符)、对长消息在 64 位机器上更快,但部分区块链与下载校验场景约定使用 SHA-256(64 个字符)。按对方文档要求选择即可。