关于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基础教程之实现石头剪刀布游戏示例
Feb 11 Python
使用Python神器对付12306变态验证码
Jan 05 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
Jun 06 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
用python爬取租房网站信息的代码
Dec 14 Python
Python3中编码与解码之Unicode与bytes的讲解
Feb 28 Python
对Python获取屏幕截图的4种方法详解
Aug 27 Python
浅谈Django中的QueryDict元素为数组的坑
Mar 31 Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 Python
python 监控服务器是否有人远程登录(详细思路+代码)
Dec 18 Python
解决jupyter notebook启动后没有token的坑
Apr 24 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中CI操作多个数据库的代码
2012/07/05 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
jquery解析JSON数据示例代码
2014/03/17 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
2017/08/24 jQuery
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
基于vue 动态菜单 刷新空白问题的解决
2020/08/06 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
python分割列表(list)的方法示例
2017/05/07 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
对python Tkinter Text的用法详解
2018/10/11 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
Python3解释器知识点总结
2019/02/19 Python
Django后台admin的使用详解
2019/07/08 Python
西班牙在线药店:DosFarma
2020/03/28 全球购物
班组长岗位职责
2014/03/03 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
教师先进工作者事迹材料
2014/05/01 职场文书
宾馆安全管理制度
2015/08/06 职场文书
红领巾广播站广播稿
2015/08/19 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
使用python向MongoDB插入时间字段的操作
2021/05/18 Python