1、直接明文保存,比如用户设置的密码是“123456”,直接将“123456”保存在数据库中,这种是最简单的保存方式,也是最不安全的方式。但实际上不少互联网公司,都可能采取的是这种方式。
2.使用MD5、SHA1等单向HASH算法保护密码,使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码。
但是,在python3的标准库中,已经移除了md5模块,而关于hash加密算法都放在hashlib这个标准库中,hashlib提供了常见的摘要算法,如SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。
例如:
import hashlib
def make_password(password):
# md5
md5 = hashlib.md5()
# 转码
sign_utf8 = str(password).encode(encoding="utf-8")
# 加密
md5.update(sign_utf8)
# 返回密文
return md5.hexdigest()
在视图函数中,调用 check_password_hash, generate_password_hash 方法
首先还要安装werkzeug
pip install werkzeug
导入
from werkzeug.security import check_password_hash, generate_password_hash
密码生成函数:
generate_password_hash(password, method=‘pbkdf2:sha1’, salt_length=8)
参数说明:
password: 明文密码
method: 哈希的方式(需要是hashlib库支持的),格式为 pbpdf2:[:iterations]。
参数说明:
method:哈希的方式,一般为SHA1,
iterations:(可选参数)迭代次数,默认为1000。
slat_length: 盐值的长度,默认为8。
密码验证函数:
check_password_hash(pwhash, password)
参数:
# 密码生成示例:
from werkzeug.security import generate_password_hash
print generate_password_hash('123456')
>>>'pbkdf2:sha1:1000$X97hPa3g$252c0cca000c3674b8ef7a2b8ecd409695aac370'
# 密码验证示例:
from werkzeug.security import check_password_hash
pwhash = 'pbkdf2:sha1:1000$X97hPa3g$252c0cca000c3674b8ef7a2b8ecd409695aac370'
print check_password_hash(pwhash, '123456')
>>>True