什么是 argon2-cffi
argon2-cffi 库是 Argon2 密码哈希算法的官方 Python 封装,通过 CFFI(C 外部函数接口)实现。Argon2 是一种现代密码哈希算法,在 2015 年密码哈希竞赛中获胜,此后一直被视为安全存储密码的黄金标准。
argon2-cffi 的主要优势在于,它通过 C 语言实现提供了高性能,同时提供了便捷的 Python 接口。该库由社区积极维护,并根据最新的安全标准定期更新。
安装与配置
标准安装
pip install argon2-cffi
安装附加依赖
pip install argon2-cffi[dev] # 用于开发
pip install argon2-cffi[tests] # 用于测试
验证安装
import argon2
print(argon2.__version__)
Argon2 算法变体
Argon2i(数据无关型)
Argon2i 针对侧信道攻击进行了优化。它访问内存的方式与密码内容无关,因此能够抵御基于执行时间的攻击。推荐用于需要防范时间分析攻击的场景。
Argon2d(数据依赖型)
Argon2d 提供对 GPU 攻击和专用硬件攻击的最大防护。它使用数据相关的内存访问方式,增加了攻击并行化的难度。但它在侧信道攻击方面的防护较弱。
Argon2id(混合型)
Argon2id 是一种混合模式,结合了两种变体的优点。它是 argon2-cffi 的默认选项,推荐用于大多数应用场景。前几轮按 Argon2i 执行,后续轮次按 Argon2d 执行。
快速上手
基本用法
from argon2 import PasswordHasher
# 创建哈希器实例
ph = PasswordHasher()
# 哈希密码
password = "我的超级秘密密码"
hash_result = ph.hash(password)
print(f"哈希值: {hash_result}")
# 验证密码
try:
ph.verify(hash_result, password)
print("密码正确!")
except Exception as e:
print(f"密码错误: {e}")
处理不同数据类型
from argon2 import PasswordHasher
ph = PasswordHasher()
# 哈希字符串
string_hash = ph.hash("字符串密码")
# 哈希字节串
bytes_password = b"bytes_password"
bytes_hash = ph.hash(bytes_password)
# 验证
ph.verify(string_hash, "字符串密码")
ph.verify(bytes_hash, bytes_password)
PasswordHasher 配置
构造函数参数
from argon2 import PasswordHasher, Type
ph = PasswordHasher(
time_cost=3, # 迭代次数(默认 2)
memory_cost=65536, # 内存大小,单位 KB(默认 51200)
parallelism=2, # 并行线程数(默认 1)
hash_len=32, # 哈希长度,单位字节(默认 32)
salt_len=16, # 盐值长度,单位字节(默认 16)
encoding="utf-8", # 编码方式(默认 "utf-8")
type=Type.ID # Argon2 类型(默认 Type.ID)
)
参数对安全性的影响
time_cost 线性增加执行时间。每增加 1,哈希时间翻倍。
memory_cost 以千字节为单位指定内存用量。较大的值会增加专用硬件攻击的难度。
图书馆中也有
推荐