关于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运行的17个时新手常见错误小结
Aug 07 Python
django rest framework之请求与响应(详解)
Nov 06 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
Django中Model的使用方法教程
Mar 07 Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 Python
Python编程深度学习计算库之numpy
Dec 28 Python
使用python将mysql数据库的数据转换为json数据的方法
Jul 01 Python
python迭代器常见用法实例分析
Nov 22 Python
使用PyTorch将文件夹下的图片分为训练集和验证集实例
Jan 08 Python
PageFactory设计模式基于python实现
Apr 14 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
Jun 11 Python
Python collections.defaultdict模块用法详解
Jun 18 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保存带BOM文件的方法
2015/02/12 PHP
PHP实现百度人脸识别
2019/05/06 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
jQuery中对节点进行操作的相关介绍
2013/04/16 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
nodejs中request库使用HTTPS代理的方法
2019/04/30 NodeJs
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
[53:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第三场 1月18日
2021/03/11 DOTA
利用Python脚本在Nginx和uwsgi上部署MoinMoin的教程
2015/05/05 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
python 连接sqlite及简单操作
2017/06/30 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
python从PDF中提取数据的示例
2020/10/30 Python
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
国际贸易求职信
2014/07/05 职场文书
党的作风建设心得体会
2014/10/22 职场文书
读后感作文评语
2014/12/25 职场文书
数学教师求职信范文
2015/03/20 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
MySQL8.0升级的踩坑历险记
2021/11/01 MySQL
python实现简单的三子棋游戏
2022/04/28 Python
python的html标准库
2022/04/29 Python