关于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设置socket代理的方法
Jan 14 Python
深入解析Python中的上下文管理器
Jun 28 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
PyCharm配置mongo插件的方法
Nov 30 Python
python实现共轭梯度法
Jul 03 Python
Python异常处理例题整理
Jul 07 Python
python实现名片管理器的示例代码
Dec 17 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 Python
matplotlib部件之套索Lasso的使用
Feb 24 Python
python实现手机推送 代码也就10行左右
Apr 12 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
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
2013/07/18 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
深入浅出php socket编程
2015/05/13 PHP
Prototype RegExp对象 学习
2009/07/19 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
javascript实现文字图片上下滚动的具体实例
2013/06/28 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
[03:57]《不朽》——2015DOTA2国际邀请赛—中国军团出征主题曲MV
2015/07/15 DOTA
python中set常用操作汇总
2016/06/30 Python
python爬虫实例详解
2018/06/19 Python
实例讲解Python爬取网页数据
2018/07/08 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
美国综合购物商城:UnbeatableSale.com
2018/11/28 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
PHP面试题及答案一
2012/06/18 面试题
remote接口和home接口主要作用
2013/05/15 面试题
商场中秋节广播稿
2014/01/17 职场文书
个人对照检查材料
2014/02/12 职场文书
生日宴会策划方案
2014/06/03 职场文书
法律专业大学生职业生涯规划书:向目标一步步迈进
2014/09/22 职场文书
实习单位证明范例
2014/11/17 职场文书
感恩教育观后感
2015/06/17 职场文书
2016道德模范先进事迹材料
2016/02/26 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python