哈希密碼(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')