使用Django作为框架搭建一个web应用是很高效的一件事。
现在我就在逐渐的熟悉这个框架,遇到了这样的问题:我们从前端获取的一些数据,例如密码都是明文,但是在数据库中存储的是对应的密文,当我们想注册或者修改密码的时候,怎样将密码等字符串转换成密文呢?当我们进行登录操作的时候,在前端表单中得到的也是明文,怎样将这些数据和后端的密文进行核对呢?
Django提供了原生的对明文加密的模块:make_password和check_password,现在就详细地梳理下。
先看看两个模块的源代码吧:
make_password
|
|
check_password
|
|
首先将这些模块import进来:
然后使用make_password生成密码:
这样生成的密码有一个特点,就是相同的字符串每一次生成的密码都不一样。
|
|
那么怎样去核对和匹配呢?就用到了checkpassword模块。
每次使用这个模块,会返回一个布尔类型的值,True表示匹配成功,False表示匹配不成功。
如果不像每次都生成不一样的密文,可以把make_password中的第二个参数也就是salt给一个固定的字符串,分析源代码可以知道如果不给传入这个参数的话,Django会自动随机生成一段密文,所以每次都不一样。举个例子:
这样做每次生成的密文都是一样的。
其实第二个参数随便传进来一个字符串都可以,但是不能为空。为空会怎样呢?
但是如果中间参数不写的话,后面的参数就自动成了第二个参数,这样就默认成第三个参数是空的,这样的生成的密文都是一样的。
那第三个参数是干什么的呢?其实指定生成密文的类型。具体我也不是很清楚。常见的有这么几种。