Python值hashlib的细节讲解

简介: Python值hashlib的细节讲解

一、hashlib的基本概念
复制代码
1、什么叫hash:hash是一种算法(不同的hash算法只是复杂度不一样)(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的内容,经过运算得到一串hash值
2、hash值的特点是(hash值/产品有三大特性:):
2.1 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验
2.2 不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码(只能有内容返回hash值)
2.3 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的(如从网上下载文件要进行hash校验,保证网络传输没有丢包)
基于2.1和2.3可以做文件下载一致性的校验
基于2.1和2.2可以对用户密码进行加密
hash算法就像一座工厂,工厂接收你送来的原材料(可以用m.update()
为工厂运送原材料),经过加工返回的产品就是hash值
复制代码
回到顶部
二、如何产生hash值之三个阶段
复制代码
import hashlib #(hash库)
import hashlib

# ######## 256

# 1、造出hash工厂

hash = hashlib.sha256('898oaFs09f'.encode('utf8')) #同一种hash算法得到的长度是固定的

# 2、运送原材料

hash.update('alvin'.encode('utf8')) #工厂传入的原材料都是bytes类型

# 3、产出hash值

print(hash.hexdigest()) # e79e68f070cdedcfe63eaf1a2e92c83b4cfb1b5c6bc452d214c1b7e77cdfd1c7

import hashlib
m=hashlib.md5() #括号内也可以传值,类型也要求是bytes类型
m.update('你好呀!'.encode('utf-8'))
print(m.hexdigest()) #9e49eb8e75b9a87424e388b862ea5f83

与上述hash的结果一样

import hashlib
m=hashlib.md5('你'.encode('utf-8')) #括号内也可以传值,类型也要求是bytes类型
m.update('好呀!'.encode('utf-8'))
print(m.hexdigest())
复制代码
回到顶部
三、校验文件的一致性(如何保证下载的文件过程中不丢包,保证下载数据的完整性)
复制代码

-----------文件一致校验----------------

'''可以拷贝一个文件放在两个不同的盘中,然后通过判断两个文件的hash值是否相等,判断两个文件是否是同一个文件'''
import hashlib
m = hashlib.md5()
with open(r'G:/logging模块配图.png','rb') as f:
for line in f:
m.update(line)
print(m.hexdigest()) #47a6b079cc33a4f312786b46e61e0305
//代码效果参考:https://v.youku.com/v_show/id_XNjQwNjgzNTA1Ng==.html

import hashlib
m = hashlib.md5()
with open(r'H:/logging模块配图.png','rb') as f:
for line in f:
m.update(line)
print(m.hexdigest())
复制代码
回到顶部
四、对明文密码进行加密
复制代码

应用:对明文密码进行加密(暴力破解-------用明文密码用一种算法算出一个hash值,与截取的hash值进行比对,比对成功说明明文密码一致,就可以破解用户的密码)

'''如用户在某网站进行注册信息,这个时候防止信息被恶意拦截获取,可以对用户明文密码进行加密,存成hash值得形式,这样用户每次登陆虽然输的是明文密码,校验hash值即可'''
password=input('>>>>>:').strip()
import hashlib
m=hashlib.md5()
m.update(password.encode('utf-8'))
print(m.hexdigest()) #00dcbdaede875d5e23f1f9f64c7849ef

对密码进行加盐(暗号)----------进一步加强密码的安全性

password=input('>>>>>:').strip()
import hashlib
m=hashlib.md5()
m.update('一行白鹭上青天'.encode('utf-8')) #对密码加盐
m.update(password.encode('utf-8'))
print(m.hexdigest())
复制代码
回到顶部
五、破解用户注册的密码
复制代码

重点

'''模拟撞库破解密码'''
import hashlib
passwds=[ #可以通过random实现对passwds中的内容
'alex3714',
'alex1313',
'alex94139413',
'alex123456',
'123456alex',
'a123lex',
]

def make_passwd_dic(passwds): #通过明文密码列表,造出与之对应的hash值得字典
dic={}
for passwd in passwds:
m=hashlib.md5() #使用md5算法,造了一个工厂

//代码效果参考:https://v.youku.com/v_show/id_XNjQwNjg0MjgwOA==.html
m.update(passwd.encode('utf-8')) #给工厂运送原材料(即我们要加密的内容)
dic[passwd]=m.hexdigest() #产出hash值(即最终的产品),将其加入到我们事先造好的空字典中,字典形式:{密码:hash值}
return dic

def break_code(cryptograph,passwd_dic): #判断拦截的hash值是否与字典中事先造好的hash值相等,相等则说明成功进行破解
for k,v in passwd_dic.items():
if v == cryptograph:
print('密码是===>\033[46m%s\033[0m' %k)

cryptograph='aee949757a2e698417463d47acac93df' #我们拦截拿到的密码,经过加密的hash值
break_code(cryptograph,make_passwd_dic(passwds)) #将要破解的密码hash值,和事先造好的hash的字典当做函数的实参传给对应的形参
复制代码

相关文章
|
27天前
|
消息中间件 人工智能 Apache
Apache RocketMQ EventBridge:为什么 GenAI 需要 EDA?
本文探讨了事件驱动架构(EDA)在AI时代的重要价值。首先,通过RAG技术缓解AI幻觉问题,提高大模型回答的准确性;其次,作为推理触发器,实现自动化任务处理和系统联动;最后,构建Agent通信基础设施,推动AI系统间的高效协作。EDA以其事件为中心、实时响应的特点,为AI系统提供感知与行动能力,是构建智能系统的关键支撑。
109 10
|
计算机视觉 Python
OpenCV完成面部情绪识别
OpenCV完成面部情绪识别
320 0
|
12月前
|
消息中间件 安全 Kafka
Python IPC机制全攻略:让进程间通信变得像呼吸一样自然
【9月更文挑战第12天】在编程领域,进程间通信(IPC)是连接独立执行单元的关键技术。Python凭借简洁的语法和丰富的库支持,提供了多种IPC方案。本文将对比探讨Python的IPC机制,包括管道与消息队列、套接字与共享内存。管道适用于简单场景,而消息队列更灵活,适合高并发环境。套接字广泛用于网络通信,共享内存则在本地高效传输数据。通过示例代码展示`multiprocessing.Queue`的使用,帮助读者理解IPC的实际应用。希望本文能让你更熟练地选择和运用IPC机制。
202 10
|
6月前
|
人工智能 搜索推荐 数据挖掘
销售易CRM:功能与优势全解析
销售易CRM是国内领先的客户关系管理系统,提供从线索获取到订单成交的完整销售漏斗管理,涵盖销售、客户、营销管理和AI赋能等功能。其强大的销售管理功能包括线索与商机管理、销售预测等;全方位客户管理实现360度客户视图;丰富的营销自动化工具支持多渠道营销活动;智能AI技术提升销售效率和客户满意度;灵活的开放性平台满足定制化需求;现代化界面设计简洁直观,支持多设备访问;移动端功能齐全,协同工具丰富;优质的客户服务确保快速响应和技术支持。销售易CRM助力企业优化业务流程,推动销售增长。
|
11月前
|
存储 运维 监控
实时计算Flink版在稳定性、性能、开发运维、安全能力等等跟其他引擎及自建Flink集群比较。
实时计算Flink版在稳定性、性能、开发运维和安全能力等方面表现出色。其自研的高性能状态存储引擎GeminiStateBackend显著提升了作业稳定性,状态管理优化使性能提升40%以上。核心性能较开源Flink提升2-3倍,资源利用率提高100%。提供一站式开发管理、自动化运维和丰富的监控告警功能,支持多语言开发和智能调优。安全方面,具备访问控制、高可用保障和全链路容错能力,确保企业级应用的安全与稳定。
194 0
|
监控 安全 网络安全
网络安全漏洞:预防与修复的技术探索
【8月更文挑战第8天】网络安全漏洞的预防和修复是一个持续的过程,需要企业从多个维度入手,采取综合措施来保障网络和信息系统的安全。通过漏洞扫描与评估、及时更新与补丁管理、访问控制与权限管理、安全配置与审查以及员工培训与教育等手段,可以有效预防网络安全漏洞的发生。同时,在发现漏洞后,应迅速启动紧急响应机制进行修复,并持续跟踪漏洞状态以确保系统的安全稳定运行。最终,通过构建完善的网络安全防护体系,企业可以有效应对各种网络安全威胁,保障自身业务的安全和持续发展。
|
Java 关系型数据库 MySQL
基于SpringBoot+Vue共享汽车管理系统(源码+部署说明+演示视频+源码介绍)(1)
基于SpringBoot+Vue共享汽车管理系统(源码+部署说明+演示视频+源码介绍)
141 1
|
SQL Java 数据处理
SQL游标的详细使用方法与实例
SQL游标的详细使用方法与实例
|
Rust JavaScript 安全
🚀JS使用Wasm为你的文件MD5计算装上火箭引擎🚀
🚀JS使用Wasm为你的文件MD5计算装上火箭引擎🚀
|
缓存 NoSQL 数据可视化
Mac下安装与使用Medis
Mac下安装与使用Medis
359 0

热门文章

最新文章