13flask密码加密
一,了解密碼加密方式
密碼具有私有性較強的特性,預測密碼加密對個人隱私的保護有這非常大的作用。在用flask搭建網站時候若服務器有被攻破的風險,要是用戶表中密碼字段也被拿走,后果將不堪設想。
在密碼保護中主要有密碼加密和密碼存儲兩種方式:
1,密碼加密
主要是在密碼本身加密過程中的處理策略。
明文轉碼加密:BASE64, 7BIT等。BASE64只是利用索引對應關系進行加密的方式,具有可逆性,在安全性上只比明文的安全性高一點點,這種方式并不能算做真正的加密。
對稱算法加密:DES, RSA等。DES是將后半部分與前半部分進行置換的策略。3DES是DES的三重加密,安全性比較高,位數也比較長,目前沒有3DES被破解的記錄。
簽名算法加密:如MD5, SHA1等。
MD5(Message-Digest Algorithm 5),也叫信息-摘要算法,他的特點是加密算法比較固定,如果兩個密碼明文部分相同,則得到的哈希值是一樣的,有被破解的風險。
加鹽哈希加密:最大特點是的“撒鹽”操作,加密時“隨機”字符串(鹽值),再進行哈希加密。即使輸入的密碼相同,若鹽值不同,那么哈希值也不一樣。
eg:我將用戶“zy”和“zy1”的密碼都設置為“111”,通過撒鹽哈希加密后得到:
明文部分一樣,但是用撒鹽方式后得到不用的密碼,具有唯一性。現在網站開發中主要是運用這種加密方法。
2密碼存儲的主要形式:
主要是在密碼本身存儲過程中的處理策略。
明文存儲:沒有任何安全性,一旦數據庫被黑所有密碼直接明文顯示在黑客面前。
加密存儲:通過一定的變換形式,使得密碼原文不易被識別。
二,認識werkzeug
暫時了解一下Web Server Gateway Interface(WSGI),Web應用的實質是客戶端想服務器發送HTTP請求,服務器根據請求返回HTTP響應,客戶端接受的響應會在客戶端顯示出來。在學習Web應用前,首先得搞懂HTTP的相關知識,以及TCP,UDP的使用,在Web開發中增加了底層開發,使得開發具有一定難度。
這時,WSGI作為在Web應用及底層TCP之間的接口,直接對WSGI操作,再通過WSGI去操作底層TCP應用,免去了底層開發的麻煩。
werkzeug是Python中WSGI規范的實用函數庫,因此,Web開發中werkzeug的重要性不言而喻,他具有如下功能:
HTTP頭解析與封裝
易于使用的request和response對象
基于瀏覽器的交互式JavaScript調試器
與 WSGI 1.0 規范100%兼容
支持Python 2.6,Python 2.7和Python3.3
支持Unicode
支持基本的會話管理及簽名Cookie
支持URI和IRI的Unicode使用工具
內置支持兼容各種瀏覽器和WSGI服務器的實用工具
集成URL請求路由系統
三,在flask中的密碼加密
在flask中的加密方式是加鹽哈希加密,我們在flask項目的model中調用加鹽哈希即可將密碼加密。具體操作:
1,在用戶表中定義好各類字段,其中包括密碼字段,初始化數據庫時將密碼加密。
1 class User(db.Model):
2 __tablename__ = "user"
3 id = db.Column(db.Integer,primary_key=True,autoincrement=True)
4 username = db.Column(db.String(50),nullable=False)
5 password = db.Column(db.String(100),nullable=False)
6
7 def __init__(self,*args,**kwargs):
8 username = kwargs.get('username')
9 password = kwargs.get('password')
10
11 self.username=username
12 self.password = generate_password_hash(password)
13
這樣在注冊過程中的密碼就進行了加密。
2,登陸
1 user = User.query.filter(User.id== id).first()
2 if user and user.check_hash_password(password):
3 session["user_id"] = user.id
4 session.permanent = True
5 return redirect(url_for('index'))
3,具體代碼:
model.py
from werkzeug.security import generate_password_hash,check_password_hash
class User(db.Model):
#定義表
__tablename__ = "user"
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
telephone = db.Column(db.String(11),nullable=False)
username = db.Column(db.String(50),nullable=False)
password = db.Column(db.String(100),nullable=False)
job = db.Column(db.String(100),nullable=False)
city=db.Column(db.String(100),nullable=False)
introduce = db.Column(db.String(100),nullable=False)
#獲取這些字段
def __init__(self,*args,**kwargs):
telephone = kwargs.get('telephone')
username = kwargs.get('username')
password = kwargs.get('password')
job = kwargs.get('job')
city = kwargs.get('city')
introduce = kwargs.get('introduce')
#加密操作
self.telephone=telephone
self.username=username
self.password = generate_password_hash(password)
self.job = job
self.city = city
self.introduce = introduce
#在登陸時候的驗證操作
def check_hash_password(self,raw_password): #這里的參數是hash過的參數以及原始傳入hash
password = check_password_hash(self.password,raw_password)
return password #得到驗證的密碼
在登陸中的操作:
app.py
user = User.query.filter(User.telephone == telephone).first() if user and user.check_hash_password(password): session["user_id"] = user.id session.permanent = Truereturn redirect(url_for('index'))
以上為flask中加鹽哈希加密的具體操作。
總結
以上是生活随笔為你收集整理的13flask密码加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于《金字塔原理》的主要内容
- 下一篇: PS文件和AI文件之间如何保持分层相互导