关于python中密码加盐的学习体会小结


Posted in Python onJuly 15, 2019

给密码加密是什么:用户注册的密码一般网站管理人员会利用md5方法加密,这种加密方法的好处是它是单向加密的,也就是说,你只有在提前知道某一串密码对应的md5加密码,才能反推出密码是多少,虽然有极小的几率可能造成两个密码加密之后的值相等(这种现象称为碰撞),不过基本上不用担心,因为概率是极低的。在常用的hashlib模块里还有sha1()等方法,它的本质和md5是一致的,只是产生的结果是160 bit字节,通常用一个40位的16进制字符串表示。而md5是最常见的加密算法,生成速度很快,生成结果是固定的128 bit字节,通常用一个32位的16进制字符串表示。

给密码加盐是什么:见上面提到的,下面内容摘自百度百科,是对彩虹表的大概定义和解释,出于预先防止黑客利用彩虹表反推盗用用户的密码账户信息,就需要给密码加‘盐',其实简单来说,就是在hashlib模块中的md5加密方法时,传入一个你自己想给的盐,或者干脆随机生成(比较安全,将盐封装在类中)。

彩虹表是一个用于加密散列函数逆运算的预先计算好的表, 为破解密码的散列值(或称哈希值、微缩图、摘要、指纹、哈希密文)而准备。一般主流的彩虹表都在100G以上。 这样的表常常用于恢复由有限集字符组成的固定长度的纯文本密码。

md5和sha1加密介绍

import hashlib

md5=hashlib.md5()
md5.update('this is an example'.encode('utf-8'))
md5.update('again'.encode('utf-8')) #这里要记得update()方法可以多次调用,可以自己试一试。
print(md5.hexdigest())
#承接上面
sha1=hashlib.sha1()
sha1.update('this is an example'.encode('utf-8'))
sha1.update('...'.encode('utf-8'))
print(sha1.hexdigest())

下面利用md5加密和加盐的方法,实现简单的用户注册,将信息储存在字典中,然后模拟登陆。

#!/usr/bin/python3
#-*-coding:UTF-8-*-

import hashlib,random

#注册
storage={}

def registration(u,p):
  if u in storage:
    return 'username occupied.please choose another username...'
  else:
    storage[u]=Users(u,p)


#加密方法
def get_md5(s):
  return hashlib.md5(s.encode('utf-8')).hexdigest()

#登陆
class Users(object):
  def __init__(self,username,password):
    self.username=username #!!!!!!!注意盐是随机给的,每注册一个账号给一次盐,封装在Users类里面,在login函数里比较相等时,
    # a.salt是注册时封装好的盐,这时是固定的盐,所以只要账号密码对了就可以了。
    self.salt=''.join([chr(random.randint(48,122)) for i in range(20)])
    self.password=get_md5(password+self.salt)

def login(user,pw):
  if user not in storage.keys():
    return 'wrong username'
  else:
    a=storage[user]
    if a.password==get_md5(pw+a.salt):
      return 'succeeded'
    else:
      return 'wrong password'

registration('mary','12345')
registration('bob','aa895')
registration('kirk','ba155')
print(storage)
print(login('mary','12345'))

最重要是理解每一次的盐都封装好了,在login函数中,只要用户输入的密码+封装好的盐正确,即可实现登陆

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之Python文档
Oct 10 Python
深入学习python的yield和generator
Mar 10 Python
Python入门_条件控制(详解)
May 16 Python
python3实现跳一跳点击跳跃
Jan 08 Python
flask-restful使用总结
Dec 04 Python
Python多图片合并PDF的方法
Jan 03 Python
Django框架模型简单介绍与使用分析
Jul 18 Python
Python中list的交、并、差集获取方法示例
Aug 01 Python
django 简单实现登录验证给你
Nov 06 Python
浅谈pymysql查询语句中带有in时传递参数的问题
Jun 05 Python
python中判断数字是否为质数的实例讲解
Dec 06 Python
Python 绘制多因子柱状图
May 11 Python
Python替换月份为英文缩写的实现方法
Jul 15 #Python
使用python爬取抖音视频列表信息
Jul 15 #Python
python过滤中英文标点符号的实例代码
Jul 15 #Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
Jul 15 #Python
python 判断字符串中是否含有汉字或非汉字的实例
Jul 15 #Python
如何利用Python模拟GitHub登录详解
Jul 15 #Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 #Python
You might like
PHP 危险函数全解析
2009/09/09 PHP
浅析PHP程序防止ddos,dns,集群服务器攻击的解决办法
2013/06/18 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
php简单图像创建入门实例
2015/06/10 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
Google 地图控件集详解及实例代码
2016/08/06 Javascript
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
使用vue中的v-for遍历二维数组的方法
2018/03/07 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
react native 原生模块桥接的简单说明小结
2019/02/26 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
Django中对数据查询结果进行排序的方法
2015/07/17 Python
基于Python和Scikit-Learn的机器学习探索
2017/10/16 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
使用Python提取文本中含有特定字符串的方法示例
2020/12/09 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
初二物理教学反思
2014/01/29 职场文书
创建文明学校实施方案
2014/03/11 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
承德避暑山庄导游词
2015/02/03 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
资金申请报告范文
2015/05/14 职场文书
爱国教育主题班会
2015/08/14 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
优秀乡村医生事迹材料(2016精选版)
2016/02/29 职场文书
Redis keys命令的具体使用
2022/06/05 Redis