day22- hashlib模块-摘要算法(哈希算法)
# python的hashlib提供了常见的摘要算法,如md5(md5算法),sha1等等。摘要:digest
# 摘要算法又称哈希算法、散列算法。
# 它通过一个函数,把任意长度的数据(明文)转换为一个长度固定的数据串(密文)(通常用16进制的字符串表示)。
# 摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,
# 目的是为了发现原始数据是否被人篡改过。摘要算法之所以能指出数据是否被篡改过,
# 就是因为摘要函数是一个单向函数,计算f(data)很容易,但通过digest反推data却非常困难。
# 而且,对原始数据做一个bit的修改,都会导致计算出的摘要完全不同。
# 要注意摘要算法虽然可以用于加密,但网上有很多可以解密的网站,存在一定的被破解的风险。
# 一个明文对应唯一密文。常用于对比登录密码和存储在电脑的密码或网站密码(文件的一致性校验)。
# 如果以明文保存用户口令(用户名或密码),如果数据库泄露,所有用户的口令就落入黑客的手里。黑客撞库。
# 此外,网站运维人员是可以访问数据库的,也就是能获取到所有用户的口令。
# 正确的保存口令的方式是不存储用户的明文口令,而是存储用户口令的摘要,比如md5 # 1.
import hashlib
md5 = hashlib.md5()#md5可改为sha1,比sha1更安全的算法是sha256和sha512,不过越安全的算法越慢,而且摘要长度更长。
md5.update(b'') #b'136320'相当于'136320'.encode('utf-8')。
print(md5.hexdigest())#d5d082d2642302fae506350fff337632,这是md5值,一个32位的16进制字符串。 # 2.如果数据量很大,可以分块多次调用update(),最后计算的结果是一样的:
import hashlib
md5 = hashlib.md5()
md5.update(b'')
md5.update(b'')#13跟6320叠加的md5值跟136320的md5值是一样的。
print(md5.hexdigest())#d5d082d2642302fae506350fff337632
# md5.update(b'136320')
# print(md5.hexdigest())#d5d082d2642302fae506350fff337632 # 3. 用户注册,密码是md5值:
import hashlib
username = input('username:')
password = input('password:')
md5 = hashlib.md5() #获取md5对象
md5.update(bytes(password,encoding = 'utf-8')) #加密:md5.update密码。password.encode('utf-8')
md5_pwd = md5.hexdigest() #获取md5值(密文)
with open('username&password',mode = 'w',encoding = 'utf-8') as f:
f.write('%s&%s'%(username,md5_pwd)) # 4. 用户登录验证:
import hashlib
username = input('username:')
password = input('password:')
with open('username&password',encoding = 'utf-8') as f:
for line in f:
user,pwd = line.split('&')
md5 = hashlib.md5()
md5.update(bytes(password,encoding='utf-8'))
#要写上encoding='utf-8',不然会抛出string argument without an encoding
md5_pwd = md5.hexdigest()
if username == user and md5_pwd == pwd:
print('登录成功')
else:
print('账户或密码不对') # 5. 加盐:经过Salt处理的MD5口令,只要Salt不被黑客知道,即使用户输入简单口令,也很难通过MD5反推明文口令,但也存在一定的被破解的风险。
import hashlib
md5 = hashlib.md5(bytes('salt',encoding = 'utf-8'))#salt可以是任意字符。
md5.update(b'')
print(md5.hexdigest())#dc740385c07799eefb7c1f1ae24050ee
# 加了盐之后,md5值跟原来的d5d082d2642302fae506350fff337632不一样。 #盐后面还可以加其他字符:b'123'
import hashlib
md5 = hashlib.md5(bytes('salt',encoding = 'utf-8') + b'')
md5.update(b'')
print(md5.hexdigest())
day22- hashlib模块-摘要算法(哈希算法)的更多相关文章
- hashlib模块--摘要算法
算法介绍: Python的hashlib提供了常见的摘要算法:MD5,SHA()等. 摘要算法,又称哈希算法,散列算法.通过一个函数,吧任意长度的字符串转换为固定长度的字符串(16进制) 摘要算法就是 ...
- hashlib 模块 摘要算法
应用于用户登陆,对密码进行加密操作, #文件操作 # hashlib 摘要算法 #md5 算法: 是32位的16进制组成的数字字符组成的字符串 #应用最广的摘要算法 #效率高,相对不复杂,如果只是传统 ...
- python学习笔记(16)hashlib.md5摘要算法(哈希算法)
一.摘要算法格式 import hashlib #导入hashlib模块 md = hashlib.md5() #获取一个md5加密算法对象 md.update('how to use md5 in ...
- os常用模块,json,pickle,shelve模块,正则表达式(实现运算符分离),logging模块,配置模块,路径叠加,哈希算法
一.os常用模块 显示当前工作目录 print(os.getcwd()) 返回上一层目录 os.chdir("..") 创建文件包 os.makedirs('python2/bin ...
- Python模块——HashLib(摘要算法)与base64
摘要算法(hashlib) Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度 ...
- hashlib(摘要算法的模块)--重要 (一)
课件地址:https://www.cnblogs.com/mys6/p/10584933.html 搜索hashlib模块 # 登录认证# 加密 --> 解密# 摘要算法# 两个字符串 :# ...
- hashlib模块(摘要算法)
hashlib(1) # hashlib模块 # 现在写登录认证的时候,需要保存用户名和密码,用户名和密码是保存在文件中,并且都是明文,一旦丢了就完蛋了.所以 # 可以用hashlib将密码转换成密文 ...
- .NET平台开源项目速览(12)哈希算法集合类库HashLib
.NET的System.Security.Cryptography命名空间本身是提供加密服务,散列函数,对称与非对称加密算法等功能.实际上,大部分情况下已经满足了需求,而且.NET实现的都是目前国际上 ...
- C# MD5摘要算法、哈希算法
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致.是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法) MD5算法具有以下特点: 1.压缩 ...
随机推荐
- SQL基础之JDBC、连接池
JDBC JDBC四个核心对象 这几个类都是在java.sql包中 DriverManager(类): 数据库驱动管理类.这个类的作用:1)注册驱动; 2)创建java代码和数据库之间的连接,即获取C ...
- [Python ]小波变化库——Pywalvets 学习笔记
[Python ]小波变化库——Pywalvets 学习笔记 2017年03月20日 14:04:35 SNII_629 阅读数:24776 标签: python库pywavelets小波变换 更多 ...
- [SDOI2016]游戏(树剖+李超树)
趁着我把李超树忘个一干二净的时候来复习一下吧,毕竟马上NOI了. 题解:看着那个dis就很不爽,直接把它转换成深度问题,然后一条直线x->y,假设其lca为z,可以拆分成x->z和z-&g ...
- Python-查找并保存特定字符串后面的字符串
-- -- 本算法用于查找并存储“特定字符串”后面的字符串. -- 举例: strli = "kaka is li is da is wei !" #用于查找的字符串 sep_li ...
- UML-架构分析-阶段
初始阶段:架构概念验证原型--->确定其可行性 细化阶段:因素表.技术备忘录.SAD(软件架构文档) 移交阶段:可能会修改SAD->确保与最终部署版本的一致性 后续进化循环:重温架构性因素 ...
- 0CTF-2016-piapiapia-PHP反序列化长度变化尾部字符串逃逸
0X00 扫描一下网站目录,得到网站源码,这里说下工具使用的是dirmap,亲测御剑不好用... 0x01 审计源码: index.php <?php require_once('class.p ...
- OpenMP笔记(六)
OpenMP有三种常见的加锁操作: critical是OpenMP的指令,它规定其后的代码为临界块,任何时候只允许一个线程访问: omp_set_lock是OpenMP的库函数,要跟omp_unset ...
- IE浏览器F12调试模式不能使用或报错以及安装程序遇到错误0x80240037的解决办法
记录一下,方便以后查找 IE浏览器F12调试模式不能使用: 需要下载补丁: 64位系统 然后下载安装,就能解决问题. 要是在安装时遇到出现: 安装程序遇到错误 0x80240037 解决方式 最后 ...
- 1)基本的MFC程序创建过程
1)基本的MFC创建过程: 2) 选择MFC应用程序: 3)然后选择特定的选项 直接完成就行了: 4)下面就是建成的样子: 5)然后是 运行结果: 6)有一个问题 那个 菜单栏是属于 F ...
- 01 语言基础+高级:1-2 面向对象和封装_day06【类与对象、封装、构造方法】
day06[类与对象.封装.构造方法] 面向对象类与对象三大特征——封装构造方法 能够理解面向对象的思想能够明确类与对象关系能够掌握类的定义格式能够掌握创建对象格式,并访问类中的成员能够完成手机类的练 ...