Python常用模块之hashlib

常用模块 - hashlib模块

一、简介

Python的hashlib提供了常见的摘要算法,如MD5、SHA1、SHA224、SHA256、SHA384、SHA512等算法。

什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。

举个例子,你写了一篇文章,内容是一个字符串“how to use python hashlib – by mayi”,并附上这篇文章的摘要是“75b850b26f4e75b1ad3db76a255065f2”。如果有人篡改了你的文章,并发表为“how to use python hashlib – by bob”,你可以一下子指定bob篡改了你的文章,因为根据“how to use python hashlib – by bob”计算出的摘要不同于原始文章的摘要。

二、md5加密

import hashlib
hash = hashlib.md5()
hash.update("mayi".encode("utf-8"))
# 7d1080e20427559fcc0a647826741f66
print(hash.hexdigest())

三、sha1加密

import hashlib
hash = hashlib.sha1()
hash.update("mayi".encode("utf-8"))
# c159ce3114fb4553683cf96d91db6d51080c02e8
print(hash.hexdigest())

四、sha256加密

import hashlib
hash = hashlib.sha256()
hash.update("mayi".encode("utf-8"))
# 5dfae51e782cce2f213ef6bc89f75c9ab6c3bd8a5d1299a73191677cd5aa1f93
print(hash.hexdigest())

五、sha384加密

import hashlib
hash = hashlib.sha384()
hash.update("mayi".encode("utf-8"))
# a1eb5c52e830d5ea4fdb0a3dc2241374f56426aebacd8890a69c7db57724788ec5047a005ecff4a23310b7f87035926f
print(hash.hexdigest())

六、sha512加密

import hashlib
hash = hashlib.sha512()
hash.update("mayi".encode("utf-8"))
# 93102ec5658f739c060e3d82096e538ec116d0c9d6925119b465f0823be99697056518465cc6fe75265deb26632c8ce62b3d63a8782c492
daac2b9c03a89defe
print(hash.hexdigest())

七、“加盐”加密

以上的加密算法虽然很厉害,但仍然存在缺陷,通过撞库可以反解。所以必要对加密算法中添加自定义key再来做加密。

import hashlib
hash = hashlib.md5('python'.encode('utf-8'))
hash.update("mayi".encode("utf-8"))
# b0758ad1aad20530044668775f389922
print(hash.hexdigest())

八、摘要算法应用

摘要算法能应用到什么地方?举个常用的例子:

任何允许用户登录的网站都会存储用户登录的用户名和密码。如何存储用户名和密码呢?方法是存到数据库表中:

1562205702(1).png

如果以明文保存用户密码,如果数据库泄露,所有用户的密码就落入到黑客的手里。此外,网站运维人员是可以访问数据库的,也就是能获取到所有用户的密码。

正确的保存密码的方式是不存储用户的明文密码,而是存储用户密码的摘要,比如MD5:

1562205711(1).png

当用户登录时,首先计算用户输入的明文密码的MD5,然后和数据库存储的MD5比较,如果一致,说明密码输入正确,否则,密码输入错误。

存储MD5的好处是即使运维人员能访问数据库,也无法获知用户的明文密码。

采用MD5存储密码是否就一定安全呢?也不一定。假设你是一个黑客,已经拿到存储MD5密码的数据库,如何通过MD5反推用户的明文密码呢?暴力破解费时费力,真正的黑客是不会这么干的。

考虑这么个情况,很多用户喜欢用“123456”、“888888”、“password”等这些简单的密码,于是,黑客可以事先计算出这些常用的密码的MD5值,得到一个反推表。这样,无需破解,只需要对比数据库的MD5,黑客就获得了使用常用密码的用户账号信息。

对于用户来讲,当然不要使用过于简单的密码。但是,我们能否在程序设计上对简单的密码加强保护呢?

由于常用密码的MD5值很容易被反推出来,所以,要确保存储的用户密码不是那些已经被计算出来的常用密码的MD5就好了,这一方法通过对原始密码加一个复杂字符串来实现,俗称“加盐”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/291638.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# 全屏label控件实现的贪吃蛇。

C# 全屏label控件实现的贪吃蛇。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using stat…

两阶段提交协议三阶段提交协议

两阶段提交协议 分布式事务是指会涉及到操作多个数据库的事务,在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。 XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易…

网络安全—模拟ARP欺骗

文章目录 网络拓扑安装使用编辑数据包客户机攻击机验证 仅做实验用途,禁止做违法犯罪的事情,后果自负。当然现在的计算机多无法被欺骗了,开了防火墙ARP欺骗根本无效。 网络拓扑 均使用Windows Server 2003系统 相关配置可以点击观看这篇文章…

安卓和Android是两种不同的操作系统?

实际上,安卓和Android并不是同一种操作系统! Android是由Google开发并维护更新的一款操作系统,目前仅能运行在Pixel手机上。 Google Pixel 与 iPhone手机:哪个更好?Google Pixel 与 Apple iPhone哪个手机才是性价比最…

【 RF 射频 电缆】 MIL-C-17F 标准 规格

第〇、?? RGXXXXX 第一、应用场景 标准号应用场景–(–)RG-8 RG-9 RG-11粗缆以太网–RG-58细缆以太网–RG-59 RG-75电视系统–RG-62ARCnet网络和IBM 3270网络–RG142电信设备之间的互连 航空电子机架 雷达 GPS 医疗–RG178通信…

Unity坦克大战开发全流程——结束场景——失败界面

结束场景——失败界面 在玩家类中重写死亡函数 在beginPanel中锁定鼠标

红日靶场第一关 attck

之前因为事情耽搁了,今天争取把第一关红日靶场完成 目前找到了关于外网服务器的网址 之前有过扫描目录得知了登陆界面 和爆破得到的密码 目前我们的想法是把病毒上传到网页当中,所以我们应该找个文件注入点 但是再次之前 我们需要找到网页的绝对路径 …

抽奖的问题

import randomlucky_num [] # 存放中奖人名单,避免多次中奖 lucky_count 0 # 表示每一种奖品人数够了for time in range(0, 3): # 抽三次奖lucky_count 0 # 每次刷新print(f第一次抽奖现在开始,这次抽的是{3-time}等奖\n)# 判断奖品是哪个if time…

什么是 JSON?JSON详解

现在程序员还有谁不知道 JSON 吗?无论对于前端还是后端,JSON 都是一种常见的数据格式。那么 JSON 到底是什么呢? JSON 的定义 JSON (JavaScript Object Notation) ,是一种轻量级的数据交换格式。它的使用…

LLM Agent之再谈RAG的召回多样性优化

1. Query多样性 2019 Query Expansion Techniques for Information Retrieval: a Survey 传统搜索Query的扩展,有基于用户搜索日志挖掘的相似Query,有基于相同召回文档关联的相似Query,也有基于SMT的Query改写方案。那和大模型时代更搭配的自…

C语言快速入门——高级特性

C语言高级特性 C语言高级特性函数创建和使用函数全局变量和局部变量函数参数和返回递归调用 指针什么是指针指针与数组多级指针指针数组与数组指针指针函数与函数指针 结构体、联合体和枚举创建和使用结构体结构体数组和指针联合体枚举typedef关键字 预处理文件包含系统库介绍宏…

Spring——Spring IOC(2)

1.Spring中的工厂类 1.1 ApplicationContext ApplicationContext的实现类,如下图: ClassPathXmlApplicationContext:加载类路径下 Spring 的配置文件FileSystemXmlApplicationContext:加载本地磁盘下 Spring 的配置文件 1.2 B…

知虾会员**成为知虾会员,尊享专属权益**

在当今繁忙的生活中,线上购物已经成为现代人们的主要消费方式之一。而作为线上购物平台的领军者之一,Shopee为了提供更加个性化和便利的购物体验,推出了知虾会员(Shopee会员)服务。知虾会员不仅可以享受到一系列会员专…

Gromacs WARNING问题

上述示例中,NA 是对系统净电荷进行中和的阳离子。请根据您的系统特性和仿真需求调整这些值。 总体而言,这个警告是为了提醒您关于电荷中性化的问题,确保您的模拟结果更加物理可信。 收敛性未达到预期精度: 警告指出,优…

喜讯|智安网络实力上榜《ISC 2023数字安全创新能力全景图谱》

近日,由360牵头举办的互联网安全大会正式发布了《ISC 2023数字安全创新能力全景图谱》,智安网络凭借在网络安全行业领先的产品实力、专业的安全服务水平及多年累积的行业经验,从300余家厂商、1000多份案例中脱颖而出,成功入围安全…

打地鼠python程序设计说明,打地鼠游戏界面设计

这篇文章主要介绍了打地鼠python程序设计说明,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。 Pygame库是专门为了帮助做出的游戏和其他多媒体应用Python编程语言的一个开放源代…

Mysql和Redis数据一致性问题

MySQL和Redis数据一致性算是个很经典的问题,在之前也看到过很多相关的文章,最近心血来潮,想把一致性问题的解决方案和存在问题都总结一下。 不推荐方案 1 先更新MySQL,再更新Redis。 如上图有两个请求要同时进行更新操作,在并发情况下,B请求虽然更新时间晚于A请求,但是…

知虾分析——深入了解Shopee平台的知虾分析工具

Shopee是一家知名的电商平台,为了帮助卖家提高业务表现,他们提供了一款强大的数据分析工具——知虾分析。这个工具可以帮助卖家监控店铺的运营状况,优化销售策略,并提高整体的业务表现。本文将深入解析知虾分析的关键功能和用途&a…

Android kotlin build.gradle.kts配置

1. 添加 maven 仓库 1. 1. settings配置 1. 1.1. settings.gradle repositories {maven {url https://maven.aliyun.com/repository/public/}mavenCentral() }1. 1.2. settings.gradle.kts repositories {maven {setUrl("https://maven.aliyun.com/repository/public/…

【STM32】STM32学习笔记-TIM编码器接口(19)

00. 目录 文章目录 00. 目录01. 编码器接口简介02. 正交编码器03. 编码器接口基本结构04. 工作模式05. 实例(均不反相)06. 实例(TI1反相)07. 预留08. 附录 01. 编码器接口简介 Encoder Interface 编码器接口编码器接口可接收增量(正交&#…