为任意文本生成加密哈希值
哈希函数接收任意输入,产生一段固定长度的"指纹",叫做哈希值或摘要。同样的输入总是产生同样的输出,但哪怕只改动一个字符,输出的哈希值也会完全不同——这个特性叫做"雪崩效应"。这个工具能为你输入的任意文本生成SHA-256、SHA-1和MD5三种哈希值,全部计算都在你的浏览器里完成。
SHA-256、SHA-1与MD5的比较
SHA-256属于SHA-2家族,生成一个256位的哈希值,写作64个十六进制字符,在目前所有应用场景下都被认为具有密码学安全性,这也是它成为新系统默认选择的原因。SHA-1生成较短的160位哈希值,自2017年起在安全用途上已被弃用,原因是研究人员证明可以刻意构造出两个不同的输入产生相同的哈希值——这种"碰撞"破坏了该算法本应提供的保证,不过它仍然存在于一些遗留系统以及Git的部分早期实现中,而Git本身也在逐步迁移到更安全的算法。MD5生成的哈希值更短,只有128位,在密码学上被认为已经"破解":用现代硬件可以刻意快速制造出碰撞,所以如今MD5只适合用在与安全无关的场合,比如简单的文件校验和,或者不需要担心有人蓄意构造恶意碰撞的快速数据库查找。
哈希函数有什么用
文件完整性校验:下载网站会公布每个文件的SHA-256哈希值。下载完成后,你可以自己计算一遍哈希值,和公布的数值对比。如果一致,说明文件在传输过程中没有损坏或被篡改。
密码存储:网站永远不应该以明文形式存储密码,而应该存储一个哈希值(理想情况下是加了随机盐的SHA-256或bcrypt),你每次登录时输入的密码会被同样哈希后拿去比对。
数字签名:给一份文件签名的过程,是先对它做哈希,再用私钥对哈希值加密。接收方可以用对应的公钥验证这个哈希值。
比特币挖矿:SHA-256被用在比特币的工作量证明算法里,矿工需要找到一个输入(nonce),让哈希结果开头有指定数量的零。
版本控制:Git用SHA-1(正在迁移到SHA-256)来标识仓库里的每一次提交、每个文件和每个对象,哈希值就是唯一标识符。
雪崩效应
加密哈希函数一个决定性的特性,就是哪怕输入只有极其微小的变化,输出也会天差地别:
"Hello" → SHA-256:185f8db3...
"hello" → SHA-256:2cf24dba...
这两个哈希值除了都只差一个大小写之外,看不出任何明显关联,这就是雪崩效应。
单向函数
哈希是单向的:你可以从输入计算出哈希值,但没法反过来从哈希值还原出原始输入。想要"破解"一个哈希值,唯一的办法是不断尝试大量输入(暴力破解或字典攻击),看哪个输入能产生同样的哈希结果。
使用方法
在输入框里输入或粘贴任意文本,SHA-256、SHA-1和MD5这三种哈希值会立刻显示在下方,每敲一个字都会重新计算。这对核对文件公布的校验和、给一段文字快速生成一个独一无二的标识符,或者单纯想探索雪崩效应是怎么运作的——一次改一个字符,看每个哈希值如何彻底变样——都很方便。
为什么哈希值没法反推
加密哈希函数被刻意设计成以一种特定方式"销毁"信息:它接收任意长度的输入,把它压缩成固定的、短小的输出,丢弃的信息远比保留的多。因为理论上无数个不同的输入都可能被压缩成同一个短小的输出,所以不存在一个唯一的逆运算能从哈希值还原出原始输入——这个过程只能单向进行。找到某个能产生给定哈希值的输入,唯一的办法是一个个尝试候选输入,看是否碰巧匹配,这正是为什么"哈希密码而不是直接存储密码"这种做法有效:即便哈希值被盗,只要哈希算法选得好、密码足够长,想从中还原出原始密码在计算上是不可行的。
为不同场合挑选合适的哈希算法
对如今任何与安全相关的场合——密码存储、数字签名、验证下载文件是否被篡改——SHA-256或者SHA-2、SHA-3家族里更强的成员都是合适的选择,因为SHA-1和MD5都存在已知的弱点,足以被有心的攻击者利用。SHA-1和MD5只在完全无关安全性的场合还有用武之地:快速捕捉意外损坏的校验和、给缓存查找生成一个简短唯一键的快捷方式,或者兼容一个尚未更新的老系统。对任何真正重要的场合拿不准该用哪个时,SHA-256几乎总是更安全的默认选择。
私密且即时
SHA-256和SHA-1通过浏览器内置的Web Crypto API计算,MD5则通过纯JavaScript实现计算,所以每个哈希值都即时呈现,你输入的任何文本都不会被发送到任何地方、记录或分享,页面加载完成后即可离线使用,生成多少次哈希都没有限制,不收费也不需要安装任何东西。
Hash generator FAQ
- What is a hash?
- A cryptographic hash function takes any input and produces a fixed-length output (the hash or digest). The same input always produces the same output, but even a one-character change produces a completely different hash.
- What is SHA-256 used for?
- SHA-256 is used in Bitcoin mining, SSL/TLS certificates, file integrity verification, password storage (with salt), and digital signatures.
- Is MD5 still safe?
- MD5 is not considered cryptographically secure for security purposes — collisions (two different inputs producing the same hash) can be generated. It is still used for non-security purposes like file checksums.