SHA-256 可以解密吗?
不能,它在设计上就不可逆。声称能「SHA256 解密」的网站做的是彩虹表反查:事先把海量常见字符串算好存进库里,你给一个哈希,它去查有没有对应记录。查得到只说明你的原文是个常见字符串;随机长口令或加盐之后的口令,任何这类站点都查不出来。
支持任意文件,最大 50 MB
sha256sum 那种「哈希 + 空格 + 文件名」的整行,会自动只取哈希部分。和 MD5 一样,严格说不算。加密是可逆的,有密钥就能还原原文;SHA 是单向散列函数,把任意长度的输入压成固定长度的摘要,过程中信息已经丢失,不存在「还原」这一步。中文习惯把它叫「SHA256 加密」,本页沿用这个说法,指的是计算 SHA-256 值。所以也不存在「SHA256 解密」——那类网站做的是彩虹表反查,原理在 MD5 在线加密 页里写得更细。
不是「位数更长所以更安全」这么简单,而是前两个已经被实际攻破了。构造两个 MD5 相同但内容不同的文件,普通电脑几秒钟就能做到;SHA-1 在 2017 年被 Google 的 SHAttered 实际碰撞,2020 年更进一步做到了选择前缀碰撞,成本降到几万美元。这意味着有人可以准备一对内容不同、哈希却相同的文件,让你校验通过却拿到另一份。SHA-256 目前没有已知的实用碰撞方法,也是 TLS 证书、新版本 Git、软件发布校验普遍采用的算法。
这是最常见的误用。SHA-256 的设计目标是快——现代显卡每秒能算几十亿次,正好方便攻击者暴力穷举。存储用户密码要用 bcrypt、scrypt 或 Argon2 这类慢哈希:它们内置加盐(每个用户一个随机盐,防止彩虹表和撞库),并且可以调节计算成本,硬件变快就把成本调高。给 SHA-256 手工加盐能挡住彩虹表,但挡不住针对单个账号的暴力破解。
三个都属于 SHA-2 家族,区别是内部字长和输出长度。SHA-256 用 32 位运算,兼容性最好,是绝大多数场景的默认选择。SHA-512 用 64 位运算,在 64 位 CPU 上往往反而更快,输出也更长。SHA-384 是 SHA-512 截断到 384 位的版本,常见于部分证书和 TLS 套件。没有特殊要求就用 SHA-256——你要比对的那个值多半也是它。
不能,它在设计上就不可逆。声称能「SHA256 解密」的网站做的是彩虹表反查:事先把海量常见字符串算好存进库里,你给一个哈希,它去查有没有对应记录。查得到只说明你的原文是个常见字符串;随机长口令或加盐之后的口令,任何这类站点都查不出来。
涉及安全一律用 SHA-256,MD5 和 SHA-1 都已被实际碰撞,不能再用来防篡改或做签名。只有在对方明确要求 MD5 时才用它——比如老系统给出的校验值就是 MD5。需要算 MD5 可以用本站的 MD5 在线加密,那一页写了「MD5 解密」网站的真实原理。
不能用于任何安全用途。它 2017 年就被实际碰撞,浏览器和证书机构早已全面弃用。这里仍然保留 SHA-1,是因为还有不少老系统、老仓库和旧文档给出的校验值是 SHA-1,你需要一个能算出来对照的工具,而不是因为它还安全。
把文件拖进上面的上传框,在「校验比对」栏粘贴发布方给出的哈希值,点计算。一致会显示绿色提示,不一致显示红色。如果你粘贴的哈希长度对不上当前算法,页面会提示你可能该换哪一个——官方给的是 SHA-1 而你选了 SHA-256,是最常见的一种对不上。
多半两边都没错,是输入不同。最常见的三个原因:文本末尾多了一个换行;换行符是 \r\n 还是 \n(Windows 记事本和 Linux 不一样);以及非 ASCII 字符的编码不是 UTF-8。本页对文本按 UTF-8 编码、不额外补换行。要排除这类差异,最稳的办法是直接算文件而不是粘贴文本。
浏览器的 WebCrypto 接口只能对一整块数据做摘要,没有提供分段流式计算的接口,所以文件要先整个读进内存。50 MB 是一个在手机上也不至于卡住的上限。更大的文件建议用系统自带的命令行工具:Windows 用 certutil -hashfile 文件名 SHA256,macOS 和 Linux 用 shasum -a 256 文件名。
没有区别,只是同一串十六进制的两种写法,比对时不区分大小写。本页默认输出小写(也是 sha256sum、shasum 这些命令行工具的习惯),勾选后可以切成大写。校验比对时会自动忽略大小写差异,不用手工统一。
不会。计算用的是浏览器内置的 WebCrypto 接口,文件读进内存、算完直接显示,全程没有一个字节离开你的设备。页面加载完之后断开网络,这个工具照常可用——这是最直接的验证方法。详见隐私政策。