参考博客:https://segmentfault.com/a/1190000002393218
一、利用python自带的hashlib库实现加密
1、SHA1加密
python中的用法:
>>> import hashlib
>>> data = '123456'
>>> temp = hashlib.sha1(data)
>>> temp.hexdigest()
'7c4a8d09ca3762af61e59520943dc26494f8941b'
1
2
3
4
5
6
flask中的用法:
import hashlib
# 注册网页
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET': # 浏览器访问
return render_template('main/ssb_login.html')
if request.method == 'POST': # form提交处理逻辑
username = request.form['username']
pwd_temp = hashlib.sha1(request.form['password'])# sha1哈希加密
password = pwd_temp.hexdigest()# sha1哈希加密
checkcode = request.form['checkcode']
if isNameExist(username): # 用户名已经存在
return 'nameisexisted'
elif not isCheckCode(checkcode): # 验证码不正确
return 'checkcodeerror'
else:
setNewAdmin(username, password,checkcode)
return 'success'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2、MD5加密
Python中用法:
>>> import hashlib
>>> data = '123456'
>>> temp = hashlib.md5(data)
>>> temp.hexdigest()
'e10adc3949ba59abbe56e057f20f883e'
1
2
3
4
5
flask中的用法:
import hashlib
# 注册网页
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET': # 浏览器访问
return render_template('main/ssb_login.html')
if request.method == 'POST': # form提交处理逻辑
username = request.form['username']
pwd_temp = hashlib.md5(request.form['password'])# MD5加密
password = pwd_temp.hexdigest()# MD5加密
checkcode = request.form['checkcode']
if isNameExist(username): # 用户名已经存在
return 'nameisexisted'
elif not isCheckCode(checkcode): # 验证码不正确
return 'checkcodeerror'
else:
setNewAdmin(username, password,checkcode)
return 'success'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
二、利用Flask中的werkzeug.security模块加密
这个模块中主要是利用到两个函数:
(1)密码生成函数:generate_password_hash
(2)密码验证函数:check_password_hash
1、密码生成函数:generate_password_hash
函数定义:
werkzeug.security.generate_password_hash(password, method='pbkdf2:sha1', salt_length=8)
1
参数说明:
password:明文密码
method:哈希加密的方法(需要hashlib库支持的),格式为pdpdf2:<method>[:iterations]
method:哈希的方式,一般为SHA1
iterations:(可选参数)迭代次数,默认为1000
salt_length:盐值的长度,默认为8
加密之后的字符串格式:
method$salt$hash
1
2
2、密码验证函数:check_password_hash
函数定义:
werkzeug.security.check_password_hash(pwhash, password)
1
参数定义:
pwhash:generate_password_hash生成的哈希字符串
password:需要验证的明文密码
check_password_hash函数用于验证经过generate_password_hash哈希的密码
。若密码匹配,则返回真,否则返回假。
用法:
OOP用法:
from werkzeug.security import generate_password_hash,check_password_hash
class User(object):
def __init__(self, username, password):
self.username = username
self.set_password(password)
def set_password(self, password):
self.pw_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.pw_hash, password)
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> me = User('John Doe', 'default')
>>> me.pw_hash
'sha1$Z9wtkQam$7e6e814998ab3de2b63401a58063c79d92865d79'
>>> me.check_password('default')
True
>>> me.check_password('defaultx')
False
1
2
3
4
5
6
7
通常用法:
#哈希加盐的密码加密方法
def enPassWord(password):#将明密码转化为hash码
return generate_password_hash(password)#返回转换的hash码
def checkPassWord(enpassword,password):#第一参数是从数据查询出来的hash值,第二参数是需要检验的密码
return check_password_hash(enpassword,password)#如果匹配返回true
1
2
3
4
5
6
#注册新用户
@main.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'GET':
return render_template("user/register.html")
if request.method == 'POST':
u = request.form['username']
p = enPassWord(request.form['password'])
email = request.form['email']
addUser(u,p,email)
return redirect('/signin')#注册完之后进入登录页面
#登录用户
@main.route('/signin', methods=['GET', 'POST'])
def signin():
if request.method == 'GET':
return render_template("user/login.html")
if request.method == 'POST':
u = request.form['username']
p = request.form['password']
if isNameExisted(u):
t = checkPassword(u);#获得数据库存储的hash值
if check_password_hash(t,p):#查询有没有这个用户
session['logged_in'] = True
return redirect('/user/blog')
else:#没有用户就是新用户那么就转入注册页面
return redirect('/register')
---------------------
作者:liefyuan
来源:优快云
原文:https://blog.youkuaiyun.com/qq_28877125/article/details/76176883
版权声明:本文为博主原创文章,转载请附上博文链接!