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
- 支持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密码加密的更多相关文章
- html5对密码加密
今天找了几个关于对html5的密码加密的方法,仅供参考 1.base64加密:在页面中引入base64.js文件,调用方法为: <html> <head> <meta c ...
- Maven-009-Nexus 用户密码加密(安全必须)
信息数据大爆发的时代,我们关心什么?没错,数据安全!数据安全!数据安全!(重要事情说三遍,哈哈哈...) 之前我们存放在 maven settings.xml 文件中的 Nexus 私服用户密码都是明 ...
- C#:使用MD5对用户密码加密与解密
C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1 ...
- 使用bcrypt进行用户密码加密的简单实现
Bcrypt百度百科: bcrypt,是一个跨平台的文件加密工具.由它加密的文件可在所有支持的操作系统和处理器上进行转移.它的口令必须是8至56个字符,并将在内部被转化为448位的密钥. 除了对您的数 ...
- Druid 数据库用户密码加密 代码实现
druid-1.0.16.jar 阿里巴巴的开源数据连接池 jar包 明文密码+私钥(privateKey)加密=加密密码 加密密码+公钥(publicKey)解密=明文密码 程序代码如下: pack ...
- 用RSA加密实现Web登录密码加密传输
通常我们做一个Web应用程序的时候都需要登录,登录就要输入用户名和登录密码,并且,用户名和登录密码都是明文传输的,这样就有可能在中途被别人拦截,尤其是在网吧等场合. 这里顺带一个小插曲,我以前有家公司 ...
- Web安全--使用Salt + Hash将密码加密后再存储进数据库
转载原地址 http://www.bozhiyue.com/mianshiti/_net/2016/0728/314239.html (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站 ...
- 转载 C#使用Salt + Hash来为密码加密
转载 http://www.csharpwin.com/csharpspace/13412r9615.shtml (一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站用户的密码),你要考 ...
- (三)学习MVC之密码加密及用户登录
1.密码加密采用SHA256 算法,此类的唯一实现是 SHA256Managed.在Common/Text.cs里添加Sha256方法: public static string Sha256(str ...
随机推荐
- DVWA渗透测试初级练习
下面的内容是我2020年后半年进行的简单的dvwa的渗透实验,顺序可能会有一些问题,但是内容我一定会搞完整,DVWA渗透环境的windows10配置phpstudy Command Injection ...
- 多测师讲解selenium _assert断言_高级讲师肖sir
assert断言 # # 断言:最常用的断言方法if判断# assert Python语法中自带的断言from selenium import webdriverfrom time import sl ...
- 从源码角度来分析线程池-ThreadPoolExecutor实现原理
作为一名Java开发工程师,想必性能问题是不可避免的.通常,在遇到性能瓶颈时第一时间肯定会想到利用缓存来解决问题,然而缓存虽好用,但也并非万能,某些场景依然无法覆盖.比如:需要实时.多次调用第三方AP ...
- jsoncpp笔记
Json Json是一种轻量级数据交换格式,可以表示数字,字符串,布尔值,null,数组,键值对: { "encoding" : "UTF-8", " ...
- C++11——chrono库开发高精度计!我们可能学的不是同一门语言~
一.前言 在我们写程序过程中,有时候需要测试我们的程序语句执行时间的耗时,当前也是有很多的库提供我们去使用,一直没有良好的跨平台的库可以提供出来:而且一般这种代码也是由我们程序员自己调用系统的库来进行 ...
- Docker Stack 笔记
Docker Compose (Docker Stack) image: Specify the image to start the container from. Can either be a ...
- (在模仿中精进数据可视化03)OD数据的特殊可视化方式
本文完整代码已上传至我的Github仓库https://github.com/CNFeffery/FefferyViz 1 简介 OD数据是交通.城市规划以及GIS等领域常见的一类数据,特点是每一条数 ...
- jquery1.9+,jquery1.10+ 为什么不支持live方法了?
live() 替换成 on() die() 替换成off() 根据jQuery的官方描述,live方法在1.7中已经不建议使用,在1.9中删除了这个方法.并建议在以后的代码中使用on方法来替代. o ...
- CPU 底层运算之乘法运算
CPU 运算加减法运算 假设计算 3+3 原码是0011 * 0011(以4位存贮单元,因为是原码,最高位不代表符号位) 1. 首先 判断 两个加数是否有 负数(减法) 如果有 负数 先将负数转 ...
- Linux命令的内部命令执行
一个命令可能既是内部命令也是外部命令 因为内部命令优先级高,先执行内部命令 [04:21:44 root@C8[ ~]#type -a echo echo is a shell builtin ech ...