哈希密碼(Password Hash):
對口令進行一次性的加密處理而形成的雜亂且永不重復的字符串。這個加密的過程被認為是不可逆的,也就是說,人們認為從哈希串中是不可能還原出原口令的。(這句話是比較官方的解釋)。
白話點說就是:當我們在注冊賬號密碼的時候,需要用到,Password Hash 會將我們注冊的密碼進行一次加密處理。然后當我們做登錄操作的時候,會進行一次解密處理去和我們輸入的密碼匹配。
在Flask中的使用:
1.導包
|
1
|
# 導包 from werkzeug.security import generate_password_hash, check_password_hash
|
其中: generate_password_hash 是生成密碼 ;
check_password_hash 是密碼驗證
而在django中也有自帶的加密方式 make_password
2. 注冊賬號的時候用到 generate_password_hash
|
1
2
3
4
5
|
@admin_blue
.route(
'add_user'
)
defadd_user():
# Adminuser是數據庫中一張表的名字 , user:注冊的賬號 pass_hash: 注冊的密碼,此時注冊的密碼的是 123
add_user
=
Adminuser(user
=
'admin'
,pass_hash
=
generate_password_hash(
'123456'
))
db.session.add(add_user)
return
'OK'
|
此時我們注冊的密碼是“123456”,當我們用到 generate_password_hash 將“123456”加密的時候,數據庫里面就變成:
3. 我們既然已經完成了注冊,就輪到登錄,當我們登錄的時候,在輸入密碼的時候,就需要用到 check_password_hash來解密,進而來驗證密碼
# 登錄
@admin_blue.route('/login',methods=['get','post'])
def login():
if request.method=='POST':
name=request.form.get('name')
psw=request.form.get('psw')
if not all([username,password]):
flash('請輸入賬號和密碼')
else:
sqluser=Adminuser.query.filter(Adminuser.user==name).first()
if not sqluser:
flash('賬號不正確')
else:
p=check_password_hash(sqluser.pass_hash,psw)
print(a)
if p:
session['admin_username']=name
return redirect(url_for('admin.index'))
else:
flash('密碼不正確')
return render_template('admin/login.html')

