关于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 datetime时间格式化去掉前导0
Jul 31 Python
Python装饰器decorator用法实例
Nov 10 Python
Python日志模块logging简介
Apr 13 Python
TensorFlow实现非线性支持向量机的实现方法
Apr 28 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
Oct 24 Python
python自动分箱,计算woe,iv的实例代码
Nov 22 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
python代码区分大小写吗
Jun 17 Python
Python在字符串中处理html和xml的方法
Jul 31 Python
python分布式爬虫中消息队列知识点详解
Nov 26 Python
python对输出的奇数偶数排序实例代码
Dec 04 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
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
linux下 C语言对 php 扩展
2008/12/14 PHP
用php或asp创建网页桌面快捷方式的代码
2010/03/23 PHP
codeigniter框架批量插入数据
2014/01/09 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
JavaScript二维数组实现的省市联动菜单
2014/05/08 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
2019/12/17 Javascript
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
一些Python中的二维数组的操作方法
2015/05/02 Python
python之PyMongo使用总结
2017/05/26 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
django多种支付、并发订单处理实例代码
2019/12/13 Python
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
美国第二大连锁药店:Rite Aid
2019/04/03 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
Unix如何在一行中运行多个命令
2015/05/29 面试题
八年级生物教学反思
2014/01/22 职场文书
集团公司党的群众路线教育实践活动工作总结
2014/03/03 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
详解CSS伪元素的妙用单标签之美
2021/05/25 HTML / CSS
python使用pymysql模块操作MySQL
2021/06/16 Python