SHA1 是一种哈希(散列)算法,把任意长度的数据计算成固定 160 位(20 字节)的摘要,通常写成 40 位十六进制字符串。下面重点说明推荐写法。
SHA1的稳妥做法
- SHA1 不是加密,所谓“SHA1解密”网站只是在已知结果库中查表
- 计算前确认字符集和是否含换行:echo 默认会在末尾加换行
- 密码不要直接用 SHA1 存储,应使用 bcrypt/Argon2 等慢哈希并加盐
- 2017 年 Google 与 CWI 公布了第一个实际碰撞(SHAttered)
示例
输入:<b>粗体</b>
计算结果:ff86fb30f52da02cea095cb18f223bef7dff915e
说明:对 UTF-8 字节计算 SHA1。
工作原理
SHA1 先对输入做填充:在末尾补 1 个“1”位和若干“0”位,再附上原始长度,使总长度是 512 位的整数倍;然后把数据分成 512 位的块,依次送入压缩函数,与内部状态(160 位)进行多轮位运算和模加,最后的状态就是摘要。SHA-1 每块 80 轮。
Java 示例
下面是 Java 中处理SHA1的常用写法:
MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] d = md.digest("abc".getBytes(StandardCharsets.UTF_8));
String hex = String.format("%040x", new BigInteger(1, d));
// Java 17+: HexFormat.of().formatHex(d)运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
本站的SHA哈希计算器工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【SHA1 还安全吗?】已不安全,浏览器和证书机构已停止接受 SHA-1 证书。
【空字符串的 SHA1 是多少?】da39a3ee5e6b4b0d3255bfef95601890afd80709。
【SHA1 能解密吗?】不能。SHA1 是单向哈希,没有密钥也没有逆运算;所谓解密是查已知明文的对照表,只对简单字符串有效。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。