关于python中密码加盐的学习体会小结
作者:python_neophyte 发布时间:2022-05-13 09:47:04
给密码加密是什么:用户注册的密码一般网站管理人员会利用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函数中,只要用户输入的密码+封装好的盐正确,即可实现登陆
来源:https://blog.csdn.net/python_neophyte/article/details/82286635


猜你喜欢
- 1 回表的性能消耗无论单列索引 还是 联合索引,一个索引就对应一个独立的B+索引树,索引树节点仅包含:索引里的字段值主键值即使根据索引树按条
- 卷积核可视化import matplotlib.pyplot as pltimport numpy as npfrom keras impo
- 相信大家对python-docx这个常用的操作docx文档的库都不陌生,它支持以内联形状(Inline Shape)的形式插入图片,即图片和
- 一、先描述一下问题吧如下创建表时候报错了CREATE TABLE `xxx` ( `id` bigint(20) NOT NUL
- 概述bootstrap开发标签页时,标签页显示正常,但点击时候对应内容区域没有变化。具体症状与解决方案1.标签页UI出现,但点击无反应,标签
- 本文实例为大家分享了python实现教务管理系统,供大家参考,具体内容如下mysql+python构成教务管理系统,提供系统管理员,教职工,
- MySQLMySQL的特点1、性能卓越,服务稳定,很少出现异常宕机;2、开放源代码无版本制约,自主性及使用成本低;3、历史悠久,社区和用户非
- 本文实例为大家分享了由Python编写的MySQL管理工具的具体代码,供大家参考,具体内容如下import pymysqlimport pa
- js汉字简繁转换源代码:<html> <head> <title>汉字简繁转换工具_asp之家</
- 逻辑判断与逻辑语句对于─件事情正确与否(真假的判断) √ X根据判断的结果做不同的事情,就是我们的逻辑业务对于条件满足的判断语句,就是条件语
- functools模块是Python的标准库的一部分,它是为高阶函数而实现的。高阶函数是作用于或返回另一个函数或多个函数的函数。一般来说,对
- 做手机整机测试的,肯定有开关机的需求,关机,几分钟后再开机(一直循环操作测试,就是不能重启);这个需求在关机后就没有办法开机了,任何脚本命令
- 目录一、问题描述:二、具体的实现:三、完整代码:一、问题描述:有一个shape为(308, 2)的二维数组,以及单独的一个数字,需要保存到c
- 让Python提速超过40倍的神器:Cython人工智能最火的语言,自然是被誉为迄今为止最容易使用的代码之一的Python。Python代码
- 比如:Set Connobject=nothing nothing如同英文单词字面意思,没有,没有那个,没有这个,没有东西 Set Conn
- 前言子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。SQL 中子查询的使用大大增强了 SELECT
- 滑动平均会为目标变量维护一个影子变量,影子变量不影响原变量的更新维护,但是在测试或者实际预测过程中(非训练时),使用影子变量代替原变量。1、
- 本文实例讲述了JS实现动态添加外部js、css到head标签的方法。分享给大家供大家参考,具体如下:function appendJQCDN
- 北京时间2020年12月1日,JetBrain公司推出了二十周年第三个稳定版的IntelliJ IDEA 2020.3 。距离上一个稳定版I
- 分析当前用户下所有表的记录总数保证好用!begin dbms_utility.analyze_schema(user,'COMPUT