crazycloudcc@blog:~/tools/hash — zsh — 80×24
--:--:--···
crazycloudcc@blog:~/tools/hash$ pwd
/home/crazycloudcc/blog/tools/hash
> cd ./tools/hash

~/tools / hash

SHA 哈希计算

用 Web Crypto 计算 SHA-256 / SHA-384 / SHA-512。明文不离开本机。

本地计算 · 无账号

使用 Web Crypto SubtleCrypto,不支持 MD5。

这是什么

哈希(摘要)把任意长度输入映射成固定长度指纹,用于校验是否被改动、生成缓存键等。本页用 Web Crypto 计算 SHA-256 / SHA-384 / SHA-512,明文不离开浏览器。摘要不可逆,本工具也不做「解密」或破解。

原理

密码学哈希追求雪崩效应:输入改一个比特,输出应面目全非;并应难以找到碰撞。SHA-2 家族输出长度固定(如 SHA-256 为 32 字节,常显示为 64 位十六进制)。浏览器 SubtleCrypto.digest 在本地完成计算,算法标识与明文一并送入实现。哈希不是加密:没有密钥,也不能从摘要还原原文。口令存储还需要加盐与专用 KDF,远不止一次 SHA-256。教学上可把摘要想成「指纹」:同一文档应总得到同一指纹,但指纹本身不包含可逆向拼回原文的说明书。若两人得到不同摘要,优先怀疑换行、编码与不可见字符,而不是算法「算错」。

什么时候用

比对两段配置是否一致、给调试标签取短指纹、或核对文档中的期望摘要时可用。不要把本页当成密码保险柜;也不要用 MD5/SHA-1 做安全决策——本页只提供更强的 SHA-2。写作业或博客示例需要固定测试向量时,用本页生成十六进制期望值,再在 Playground 或本机 OpenSSL 对照,比口头描述「随便哈希一下」可靠得多。

示例

  • SHA-256 空串
    输入:(空字符串)
    输出:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
  • 同一输入多次相同
    输入:crazycloudcc
    输出:算法与 UTF-8 编码固定时,摘要前后一致(以页面十六进制为准)

常见错误

  • 换行 \n 与 \r\n 会产生不同摘要,跨平台粘贴时要统一。
  • Unicode 正规化形式不同(NFC/NFD)也会导致哈希不同。
  • 把毫秒级日志整段哈希前,先确认是否包含会变化的时间戳字段。

常见问题

能从哈希反推原文吗?
设计上不能。极短原文可能被穷举猜测,但本工具不做破解。
支持文件选择吗?
当前面向文本。大文件请在本机用 shasum / certutil。
结果是十六进制还是 Base64?
页面以常见小写十六进制展示,便于和文档对照。

OpenSSL 命令行对照(本机)

# 在终端(非浏览器)对照同一字符串:
# printf 'crazycloudcc' | openssl dgst -sha256
# 与本页 SHA-256 十六进制结果应一致(注意有无换行)

Playground 若未链接 OpenSSL,可用本页生成期望值,再在本机或 CI 里断言。注意 printf 与 echo 对换行的处理差异。

在 Playground 打开 · 数据只在本地处理:摘要在浏览器 Web Crypto 中计算。

branch: mainposts: 12encoding: utf-8