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 是单向哈希,没有密钥也没有逆运算;所谓解密是查已知明文的对照表,只对简单字符串有效。
文中示例可以在本站对应工具中验证;处理密码、证件号等敏感数据时,请注意保护隐私。