关于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 13 Python
批量将ppt转换为pdf的Python代码 只要27行!
Feb 26 Python
python实现类之间的方法互相调用
Apr 29 Python
python实现猜数字小游戏
Mar 24 Python
python保存网页图片到本地的方法
Jul 24 Python
Python的argparse库使用详解
Oct 09 Python
python实现统计文本中单词出现的频率详解
May 20 Python
python常用函数与用法示例
Jul 02 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
Python3 中作为一等对象的函数解析
Dec 11 Python
通过案例解析python鸭子类型相关原理
Oct 10 Python
python+opencv实现视频抽帧示例代码
Jun 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
tp5(thinkPHP5)框架实现多数据库查询的方法
2019/01/10 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
javascript中 try catch用法
2015/08/16 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
js获取浏览器的各种属性
2017/04/27 Javascript
Vue.js常用指令的使用小结
2017/06/23 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
vue结合el-upload实现腾讯云视频上传功能
2020/07/01 Javascript
解决vue一个页面中复用同一个echarts组件的问题
2020/07/19 Javascript
在Python下利用OpenCV来旋转图像的教程
2015/04/16 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
Python callable()函数用法实例分析
2018/03/17 Python
python实现泊松图像融合
2018/07/26 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
python读文件的步骤
2019/10/08 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
应届生护士求职信
2013/11/01 职场文书
三年级音乐教学反思
2014/01/28 职场文书
幼儿园教师国培感言
2014/02/02 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫
Python如何利用pandas读取csv数据并绘图
2022/07/07 Python