Python crypt 模块
Linux 下的用户名和密码是加盐哈希后保存在 /etc/shadow
文件里的。这里 有文件格式的介绍。
Python 标准库里,有一个 crypt 模块,可以用来生成密码哈希。
crypt 定义了几个方法:
- crypt.METHOD_SHA512
- crypt.METHOD_SHA256
- crypt.METHOD_MD5
- crypt.METHOD_CRYPT
使用 crypt.crypt()
方法来完成密码哈希:
>>> import crypt
>>> crypt.crypt('abcdef', salt=crypt.mksalt(crypt.METHOD_SHA512))
'$6$N8LmyBy7vIQWGr50$dU.wj61pDDFieqclv0MsFhYFn5qMpK3Ec4L6F6lOKqmj2kQEYNhoYnYVG.XxwgW1cGEyw6cOAUlqMlVy.V7aC0'
按照文档里的说法,crypt 模块将会从标准库中删除:
Deprecated since version 3.11, will be removed in version 3.13: The crypt module is deprecated (see PEP 594 for details and alternatives). The hashlib module is a potential replacement for certain use cases. The passlib package can replace all use cases of this module.
替代方法一:base64 + hashlib
使用标准库里的 base64 和 hashlib:
import base64
import hashlib
import os
salt = base64.b64encode(os.urandom(12))
password = base64.b64encode(hashlib.pbkdf2_hmac('sha512', bytes('abcdef', 'UTF-8'), salt, 200000, 64))
print('SHA512 :: $6${}${}'.format(salt.decode('UTF-8'), password.decode('UTF-8')))
替代方法二:passlib
https://pypi.org/project/passlib/
参考资料