关于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获取当前日期和时间的方法
Apr 30 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
Python数字图像处理之霍夫线变换实现详解
Jan 12 Python
Numpy截取指定范围内的数据方法
Nov 14 Python
python实现微信每日一句自动发送给喜欢的人
Apr 29 Python
Python使用微信接入图灵机器人过程解析
Nov 04 Python
Python实现密码薄文件读写操作
Dec 16 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
python,Java,JavaScript实现indexOf
Sep 09 Python
python编程的核心知识点总结
Feb 08 Python
python实现双链表
May 25 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
Ajax PHP分页演示
2007/01/02 PHP
yii实现CheckBox复选框在同一行显示的方法
2014/12/03 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
jquery获取radio值(单选组radio)
2014/10/16 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
深入理解vue Render函数
2017/07/19 Javascript
node.js 利用流实现读写同步,边读边写的方法
2017/09/11 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
jquery判断滚动条距离顶部的距离方法
2018/09/05 jQuery
函数式编程入门实践(一)
2019/04/20 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
[32:39]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第一场 11.04
2020/11/04 DOTA
python基础教程之类class定义使用方法
2014/02/20 Python
pyenv命令管理多个Python版本
2017/03/26 Python
python3使用pyqt5制作一个超简单浏览器的实例
2017/10/19 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
Weblogc domain问题
2014/01/27 面试题
关于赌博的检讨书
2014/01/24 职场文书
教师对学生的评语
2014/04/28 职场文书
个人综合鉴定材料
2014/05/23 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
赤壁观后感(2)
2015/06/15 职场文书
汤姆索亚历险记读书笔记
2015/06/29 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
一文弄懂MySQL索引创建原则
2022/02/28 MySQL
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android