明白了,你是想了解 SHA-1 加密(严格来说是哈希,不是加密)。我给你做一个 全面讲解,包括原理、特点、使用方法和 Python 示例。
1️⃣ SHA-1 是什么
- SHA-1(Secure Hash Algorithm 1) 是一种 哈希算法
- 输入任意长度的数据 → 输出 固定 160 位(20 字节)摘要
- 常用于:
- 数据完整性校验(如 Git 提交 hash)
- 文件校验
- 生成签名摘要
注意:SHA-1 不是可逆的加密,不能解密回原文,只能比对哈希值。
2️⃣ SHA-1 特点
| 特性 | 说明 |
|---|---|
| 输出长度 | 160 位(20 字节),一般用 40 位十六进制表示 |
| 单向性 | 给定摘要无法推算原始数据 |
| 敏感性 | 原文哪怕改动一个字节,摘要完全不同 |
| 安全性 | 已被破解(可产生碰撞),不推荐用于密码存储 |
✅ 可以用作文件校验、数字签名等
❌ 不推荐用于密码加密或安全认证(改用 SHA-256 或 SHA-3)
3️⃣ SHA-1 Python 示例
import hashlib
# 原始字符串
text = "Hello, world!"
# 创建 SHA-1 对象
sha1 = hashlib.sha1()
# 更新数据(必须是 bytes 类型)
sha1.update(text.encode('utf-8'))
# 获取十六进制摘要
hash_result = sha1.hexdigest()
print("原文:", text)
print("SHA-1 哈希:", hash_result)
输出示例:
原文: Hello, world!
SHA-1 哈希: 943a702d06f34599aee1f8da8ef9f7296031d699
🔹 一行生成
hashlib.sha1("Hello, world!".encode('utf-8')).hexdigest()
4️⃣ 文件 SHA-1 校验示例
import hashlib
def file_sha1(filename):
sha1 = hashlib.sha1()
with open(filename, 'rb') as f:
while True:
data = f.read(65536) # 分块读取
if not data:
break
sha1.update(data)
return sha1.hexdigest()
print(file_sha1("example.zip"))
分块读取大文件,避免一次性读入内存。
5️⃣ 安全性注意事项
- SHA-1 已经不安全,存在碰撞攻击
- 对密码等敏感信息,应使用:
SHA-256 / SHA-512- 或更安全的
bcrypt / scrypt / Argon2
- SHA-1 适合:
- 文件校验
- Git 哈希
- 简单签名摘要(非安全关键场景)
发表回复