关于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网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
Jun 09 Python
Python编程语言的35个与众不同之处(语言特征和使用技巧)
Jul 07 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
Python随手笔记之标准类型内建函数
Dec 02 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
利用Tkinter(python3.6)实现一个简单计算器
Dec 21 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
Apr 05 Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 Python
opencv python图像梯度实例详解
Feb 04 Python
python使用re模块爬取豆瓣Top250电影
Oct 20 Python
pycharm中leetcode插件使用图文详解
Dec 07 Python
Flask搭建一个API服务器的步骤
May 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
PHP仿盗链代码
2012/06/03 PHP
yii框架配置默认controller和action示例
2014/04/30 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php简单防盗链实现方法
2015/07/29 PHP
PHP7+Nginx的配置与安装教程详解
2016/05/10 PHP
PHPStorm+XDebug进行调试图文教程
2016/06/13 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
Jquery中扩展方法extend使用技巧
2014/08/24 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
python Django连接MySQL数据库做增删改查
2013/11/07 Python
Windows下搭建python开发环境详细步骤
2020/07/20 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
深入理解Django-Signals信号量
2019/02/19 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
python实现定时发送邮件
2020/12/23 Python
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
Jack Rogers官网:美国经典的女性鞋靴品牌
2019/09/04 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
校园网站的创业计划书范文
2013/12/30 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
房屋所有权证明
2014/10/20 职场文书
关于安全的广播稿
2014/10/23 职场文书
教师业务学习材料
2014/12/16 职场文书
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技