侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   177

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

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

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

md5和sha1加密介绍

import hashlibmd5=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函数中,只要用户输入的密码+封装好的盐正确,即可实现登陆

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


  • 上一条:
    Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
    下一条:
    Python替换月份为英文缩写的实现方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客