关于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 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
windows下 兼容Python2和Python3的解决方法
Dec 05 Python
PyQt5实现类似别踩白块游戏
Jan 24 Python
Python3 实现串口两进程同时读写
Jun 12 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
Jun 18 Python
python开启debug模式的方法
Jun 27 Python
python sqlite的Row对象操作示例
Sep 11 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
Python try except异常捕获机制原理解析
Apr 18 Python
Python 没有main函数的原因
Jul 10 Python
python如何爬取网页中的文字
Jul 28 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
dede全站URL静态化改造[070414更正]
2007/04/17 PHP
PHP strtok()函数的优点分析
2010/03/02 PHP
PHP删除目录及目录下所有文件的方法详解
2013/06/06 PHP
php递归实现无限分类的方法
2015/07/28 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
jQuery的实现原理的模拟代码 -2 数据部分
2010/08/01 Javascript
javascript使用eval或者new Function进行语法检查
2010/10/16 Javascript
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
JS hashMap实例详解
2016/05/26 Javascript
JS实现pasteHTML兼容ie,firefox,chrome的方法
2016/06/22 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
js 实现复选框只能选择一项的示例代码
2018/01/23 Javascript
js html实现计算器功能
2018/11/13 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
python paramiko远程服务器终端操作过程解析
2019/12/14 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
社区学雷锋活动策划方案
2014/01/30 职场文书
旅游安全协议书
2014/04/21 职场文书
开学典礼策划方案
2014/05/28 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
java解析XML详解
2021/07/09 Java/Android