标签:解密 客户 运用 init generate direct 破解 字段 用户表
一,了解密码加密方式
密码具有私有性较强的特性,预测密码加密对个人隐私的保护有这非常大的作用。在用flask搭建网站时候若服务器有被攻破的风险,要是用户表中密码字段也被拿走,后果将不堪设想。
在密码保护中主要有密码加密和密码存储两种方式:
1,密码加密
主要是在密码本身加密过程中的处理策略。
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的重要性不言而喻,他具有如下功能:
三,在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中加盐哈希加密的具体操作。
标签:解密 客户 运用 init generate direct 破解 字段 用户表
原文地址:https://www.cnblogs.com/two-peanuts/p/11143575.html