关于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中的自省(反射)详解
Jun 02 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
Aug 23 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
Jan 30 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
python实现DEM数据的阴影生成的方法
Jul 23 Python
Python如何调用外部系统命令
Aug 07 Python
Python中私有属性的定义方式
Mar 05 Python
Django-xadmin+rule对象级权限的实现方式
Mar 30 Python
在spyder IPython console中,运行代码加入参数的实例
Apr 20 Python
python空元组在all中返回结果详解
Dec 15 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下几种删除目录的方法总结
2007/08/19 PHP
兼容PHP5的PHP目录管理函数库
2008/07/10 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
2019/08/05 PHP
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
兼容FF和IE的动态table示例自写
2013/10/21 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
Python判断文件和文件夹是否存在的方法
2015/05/21 Python
python实现媒体播放器功能
2018/02/11 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
python遍历小写英文字母的方法
2019/01/02 Python
python生成带有表格的图片实例
2019/02/03 Python
python字典setdefault方法和get方法使用实例
2019/12/25 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
办公室保洁员岗位职责
2013/12/02 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
小学毕业寄语大全
2014/04/03 职场文书
中国文明网向国旗敬礼活动精彩寄语2014
2014/09/27 职场文书
社区灵活就业证明
2014/11/03 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
2014年工作总结与下年工作计划
2014/11/27 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
解决Python中的modf()函数取小数部分不准确问题
2021/05/28 Python
剖析后OpLog订阅MongoDB的数据变更就没那么难了
2022/02/24 MongoDB
分享Python异步爬取知乎热榜
2022/04/12 Python