基于flask的在线笔记共享管理系统【10】(密码加密passlib)
在用户注册时,将数据存入数据库,但是为了保证数据的保密性,使得用户密码对于数据库管理员也不可见需要对密码进行加密再存入数据库 。passlib是python 2&3的密码散列库
它提供 超过30种密码散列算法的跨平台实现,以及 作为管理现有密码哈希的框架。它被设计成有用的 对于范围广泛的任务,从验证/etc/shadow中找到的散列到 为多用户应用程序提供全强度密码哈希。
大家可以参考一下官方参考文档https://passlib.readthedocs.io/en/stable/
库的安装 使用pip安装
pip install passlib
版本说明
Passlib需要Python 2(> = 2.6)或Python 3(> = 3.3)
使用说明
这里只强调如何使用这个库进行加密,关于加密的原理不做详细解释
首先看一下本项目中的案例。在主入口文件中manage.py中。
使用下面语句导入函数库
from passlib.hash import sha256_crypt
这里只涉及到用户的注册和用户的登录两部分,下面代码为节选,详细代码我已经上传了源码到我的 资源里。大家可以参考参考。
用户注册成功以后,数据会被存入数据库。密码部分已经加密
用户登录的时候需要输入密码验证身份,代码如下,只需要通过库里的函数进行验证即可。
这里对密码验证,如果验证的俩个密码一致,返回1,否则返回0
上面的是本次实验对于数据加密部分的应用。用到了passlib库中的俩个函数
sha256_crypt.encrypt(str(form.password.data))
sha256_crypt.verify(password_candidate, password)
这里对这俩各函数做一些说明
sha256_crypt密码哈希算法,遵循PasswordHash API
https://passlib.readthedocs.io/en/stable/lib/passlib.ifc.html#password-hash-api
对于一般的应用程序的开发,我们需要用到 PasswordHash.hash() 【PasswordHash.encrypt()】生成新的哈希值,以及PasswordHash.verify() 根据现有的哈希值检查密码俩种方法。
PasswordHash.hash(秘码,**kwds )
这里有俩个参数,
第一个参数是需要进行加密的密码字符串,注意这里的数据类型是字符串而不是int型数据
第二个参数可以缺省,后续版本对其进行了改进,我们的一般编程用不到。想了解的同学可以参考上面的参考文档。
返回值,该函数返回一个哈希加密过的字符串
这里的新版本对其进行了改名PasswordHash.encrypt(秘密,**kwds )也就是我们实例中用到的函数
PasswordHash.verify( secret , hash , **context_kwds )
使用现有哈希验证密钥。这会检查一个秘密是否与存储在指定哈希中的秘密匹配
第一个参数是需要检查的字符串
第二个参数是一个哈希序列。即已经被加密过的字符串
第三个参数是额外的,可以缺省,多数情况下用不到。
返回值: 该函数是一个判断函数,如果来个密码一致,返回true,否则返回false。