关于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之关于类的初步认识
Oct 11 Python
几个提升Python运行效率的方法之间的对比
Apr 03 Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
Python减少循环层次和缩进的技巧分析
Mar 15 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 Python
Python计算两个矩形重合面积代码实例
Sep 16 Python
tensorflow中tf.reduce_mean函数的使用
Apr 19 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 Python
python脚本框架webpy模板赋值实现
Nov 20 Python
python区块链实现简版工作量证明
May 25 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
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
PHP实现文件下载详解
2014/11/27 PHP
php实现插入排序
2015/03/29 PHP
php根据日期或时间戳获取星座信息和生肖等信息
2015/10/20 PHP
php中的钩子理解及应用实例分析
2019/08/30 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
使用ImageMagick进行图片缩放、合成与裁剪(js+python)
2013/09/16 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
javaScript数组迭代方法详解
2016/04/14 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
js实现适合新闻类图片的轮播效果
2017/02/05 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
[53:10]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs VG 第一场
2018/04/11 DOTA
Python数据分析模块pandas用法详解
2019/09/04 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
如何利用Python识别图片中的文字
2020/05/31 Python
Python 没有main函数的原因
2020/07/10 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
Zooplus罗马尼亚:宠物食品和配件
2019/11/02 全球购物
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
行政管理专业推荐信
2013/11/02 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
企业趣味活动方案
2014/08/21 职场文书
综治工作心得体会
2014/09/11 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
HAM-2000摩机图
2021/04/22 无线电
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang