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.压缩 ...
随机推荐
- 编写软件动态加载NT式驱动
NT式设备驱动程序的动态加载主要是由服务控制管理程序(Service Control Manager,即SCM)系统组件来完成的. Windwos服务可以在系统启动时加载,用户也可以按需在服务控制平台 ...
- Chrome在新版MacOS上报错 NET::ERR_CERT_WEAK_KEY 解决方法
现象 原文链接 证书详情: 原因 参考苹果官网给出的提示(https://support.apple.com/en-us/HT210176): RSA秘钥长度必须>=2048,小于这个长度的将不 ...
- sed使用案例
简介: sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用 ...
- Vue框架的介绍及使用
Vue框架 定义:渐进式 JavaScript 框架 渐进式:可以控制一个页面的一个标签,可以控制一系列标签,也可以控制整个页面,甚至可以控制整个前台项目. 通过对框架的了解与运用程度,来决定其在整个 ...
- phpmyadmin拿网站shell
开门见山 1. 找到一个赌博网站,发现存在php探针界面,在下面输入密码尝试用弱口令进行连接,尝试是否成功 失败的结果是这样. 2. 成功! 3. 连接成功的,点击phpMyAdmin管理,进行弱口令 ...
- 阿里云-容器服务之集群服务 k8s(Jenkins+gitlab+k8s的devops)- 04
配置jenkins和gitlab: 1.进入jenkins,新增一个项目,demo-piepeline,创建好,点击配置, 2 .设置镜像地址的命名空间: 3.设置镜像的名字 4.设置代码的分支或者t ...
- sync实现windows与nginx主机端文件同步(参考文档)
资源 Rsync官网:http://rsync.samba.org/ 简介 Rsync(remote sync)是类unix系统下的远程(LAN/WAN)数据镜像备份工具.可以实现Linux与linu ...
- PAT A1005-1008
A 1005 Spell It Right (20 point(s)) 25分的题目,比较简单,注意N的范围,用字符串处理即可. #include <iostream> #include ...
- JNI的第1种写法 及 JNI通过形参修改Java数据
声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635 目的:通过形参在Java 和C之间传递数据,尤其是大块的媒体数据 优点:避免通过返回值返回一个巨大的数据块 ...
- Object中有哪些公共方法及作用
大家在学习java的时候,一定遇到过Object类,因为在java单一继承体系中Object类是根类,所有的类都会继承它,并拥有Object的公共方法,意味着在java的面向对象的世界中,所有对象都拥 ...