SHA1详解:原理、规则与易错点

61 0

SHA1 是一种哈希(散列)算法,把任意长度的数据计算成固定 160 位(20 字节)的摘要,通常写成 40 位十六进制字符串。下面重点说明原理、规则与易错点。

SHA1详解

SHA1 先对输入做填充:在末尾补 1 个“1”位和若干“0”位,再附上原始长度,使总长度是 512 位的整数倍;然后把数据分成 512 位的块,依次送入压缩函数,与内部状态(160 位)进行多轮位运算和模加,最后的状态就是摘要。SHA-1 每块 80 轮。

  • 输入是字节:同一段中文按 UTF-8 和 GBK 计算,结果不同
  • 输出通常用小写十六进制表示,大小写不影响比较
  • 也可以用 Base64 表示(20 字节编码为 28 个字符)
  • 比较两个摘要时应使用常量时间比较函数,防止时序攻击

示例

输入:user@example.com

计算结果:63a710569261a24b3766275b7000ce8d7b32e2f7

说明:对 UTF-8 字节计算 SHA1。

常见用途

  • 校验下载文件是否完整、未被篡改(对照官方公布的摘要)
  • 数据去重、缓存键、文件指纹
  • 数字签名和证书(只适用于安全的算法)
  • HMAC 消息认证
  • Git 早期使用 SHA-1 作为对象 ID

JavaScript 示例

下面是 JavaScript 中处理SHA1的常用写法:

// 浏览器 Web Crypto(支持 SHA-1/SHA-256,不支持 MD5)
const buf = await crypto.subtle.digest("SHA-1", new TextEncoder().encode("abc"));
const hex = [...new Uint8Array(buf)].map(b => b.toString(16).padStart(2, "0")).join("");
// Node.js
require("crypto").createHash("sha1").update("abc").digest("hex");

运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。

本站的SHA哈希计算器工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。

常见问题

【SHA1 还安全吗?】已不安全,浏览器和证书机构已停止接受 SHA-1 证书。

【空字符串的 SHA1 是多少?】da39a3ee5e6b4b0d3255bfef95601890afd80709。

【SHA1 能解密吗?】不能。SHA1 是单向哈希,没有密钥也没有逆运算;所谓解密是查已知明文的对照表,只对简单字符串有效。

文中示例可以在本站对应工具中验证;处理密码、证件号等敏感数据时,请注意保护隐私。

署名:123问编辑部 · 最近修订:2026-11-11 · 已按编辑与审核说明检查;内容仅供参考,不构成医疗、法律或投资建议。发现错误可查看纠错方式。

标签: SHA1 文本处理

抱歉,评论功能暂时关闭!