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/

参考资料

Read More: