关于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通过floor函数舍弃小数位的方法
Mar 17 Python
Python3指定路径寻找符合匹配模式文件
May 22 Python
浅谈Python基础之I/O模型
May 11 Python
Flask数据库迁移简单介绍
Oct 24 Python
python:print格式化输出到文件的实例
May 14 Python
python中从str中提取元素到list以及将list转换为str的方法
Jun 26 Python
Python3实现的反转单链表算法示例
Mar 08 Python
Python3中函数参数传递方式实例详解
May 05 Python
Django实现发送邮件找回密码功能
Aug 12 Python
Python拆分大型CSV文件代码实例
Oct 07 Python
iPython pylab模式启动方式
Apr 24 Python
Django vue前后端分离整合过程解析
Nov 20 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自动更新新闻DIY
2006/10/09 PHP
PHP中的类-什么叫类
2006/11/20 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
laravel 实现用户登录注销并限制功能
2019/10/24 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
jQuery实现checkbox全选的方法
2015/06/10 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
实例讲解JavaScript截取字符串
2018/11/30 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
python 对象和json互相转换方法
2018/03/22 Python
Python实现的读写json文件功能示例
2018/06/05 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
python json 递归打印所有json子节点信息的例子
2020/02/27 Python
PYcharm 激活方法(推荐)
2020/03/23 Python
python简单实现插入排序实例代码
2020/12/16 Python
CSS3实现swap交换动画
2016/01/19 HTML / CSS
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
实习自我评价怎么写
2013/12/02 职场文书
办理收楼委托书范本
2014/10/09 职场文书
2014年学前班工作总结
2014/12/08 职场文书
活动费用申请报告
2015/05/15 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript