SHA1 是一种哈希(散列)算法,把任意长度的数据计算成固定 160 位(20 字节)的摘要,通常写成 40 位十六进制字符串。下面重点说明Java 示例与注意事项。
SHA1在 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),结果可以用本站工具交叉核对。
示例
输入:I ♥ Unicode
计算结果:9375811416327c62365f8f902bf1f56e59e81c78
说明:对 UTF-8 字节计算 SHA1。
规则说明
- 输入是字节:同一段中文按 UTF-8 和 GBK 计算,结果不同
- 输出通常用小写十六进制表示,大小写不影响比较
- 也可以用 Base64 表示(20 字节编码为 28 个字符)
- 比较两个摘要时应使用常量时间比较函数,防止时序攻击
Python 示例
下面是 Python 中处理SHA1的常用写法:
import hashlib
hashlib.sha1("abc".encode("utf-8")).hexdigest()
# a9993e364706816aba3e25717850c26c9cd0d89d
h = hashlib.sha1()
with open("file.iso", "rb") as f:
for chunk in iter(lambda: f.read(1 << 20), b""):
h.update(chunk)
print(h.hexdigest())运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
本站的SHA哈希计算器工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【同一个文本为什么算出的 SHA1 不一样?】通常是输入字节不同:字符集不同、末尾多了换行或空格、全角半角不同。
【SHA1 还安全吗?】已不安全,浏览器和证书机构已停止接受 SHA-1 证书。
【空字符串的 SHA1 是多少?】da39a3ee5e6b4b0d3255bfef95601890afd80709。
文中示例可以在本站对应工具中验证;处理密码、证件号等敏感数据时,请注意保护隐私。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。