Python的哈希hashlib模块详细解读

的哈希模块详细解读

时间更新至, 二零二三年, 九月二十二日, 上午九点五十三分十七秒, 作者名为, 生有涯, 知无涯。

这篇文章着重对哈希模块予以详细解读, 它是一个具备字符加密功能的模块, 其中涵盖了MD5以及SHA的加密算法, 具体而言支持md5、sha1等地之类算法 , 该模块于用户登录认证层面应用颇为广泛, 在文本加密方面亦是极为常见, 有需求的朋友能够参考一番。

1.模块

有一个模块, 它能提供字符加密功能, 其中涵盖了MD5以及SHA的加密算法, 具体来说能支持md5、sha1等等算法, 这个模块在用户登录认证方面有着广泛的应用, 并且在文本加密里也较为常见。

首先, 哈希算法(Hash)指的是这样一种函数, 简而言之, 它会把任意长度的信息转换为某一有着固定长度的消息摘要, 哈希算法属于一种压缩映射, 这示意着所输出散列值的范围一般要远远小于输入的范围, 而且不同的输入有可能会被散列成相同的输出, 所以从散列值无法确定唯一的输入值。

哈希的特点:

1)就是说, 只要输入是相同的, 那么输出方面的哈希肯定也就是同样的呢(此可用于文件、以及下载完整性校验这个用途方面)。

2)哈希算法不可逆,即使拿到哈希,也不能推出源文件;

3)不论校验内容是不是相同, 只要使用的哈希算法保持不变, 所求得的哈希长度是固定不变的, 无关于校验内容是否相同。

加盐

加盐加密, 也就是对系统登录口令的加密方式, 它的实现途径是, 让每一个口令, 都和一个被称作"盐", 记作salt的n位随机数建立关联。

不管在什么时候, 一旦口令得到更改时, 随机数便会发生变化;随机数是以未加密的形式存于口令文件之内的, 如此一来, 每一个人都能够进行读取;不再单纯地保存加密过后的口令了, 而是先将领口令与随机数相互连接在一起随后一并实施加密处理, 加密之后所产生的结果放置在口令文件当中。

2.基本调用

brush:py; 复制代码
import hashlib
new_md5 = hashlib.md5()  #创建hashlib的md5对象
new_md5.update('字符串')  #将字符串载入到md5对象中,获得md5算法加密。
print(new_md5.hexdigest())  #通过hexdigest()方法,获得new_md5对象的16进制md5显示。

简单来说。就是三步:

1,建立加密对象。

2,对字符串进行算法加密。

3,获得16进制显示

可以创建的加密算法有:md5,sha1, , , ,

例:

brush:py; 复制代码
new_md5 = hashlib.md5()   
new_sha1 = hashlib.sha1()  
new_sha256 = hashlib.sha256()

简单调用:

brush:py; 复制代码
new_md5 = hashlib.new('md5',b'字符串').hexdigest()
#或者
new_md5 = hashlib.md5(str(time.time().encode('utf-8')).hexdigest()

留意, 当朝着对象投入字符串之际, 务必是编码类型才行。能够运用字符串前面加上b' '的办法, 或者运用.('UTF-8')的办法, 最终让字符串转变为bytes类型。

下面, 我们会引入一个简单的实例籍此表明最常被运用的MD5算法于实际当中的应用情况。在引入该实例之前, 让我们先获取对MD5基本特性的一种认识。

3.扩展 md5算法的特点

那么现在, 我们已然清楚了MD5算法的特性, 这方面咱们已经知晓了。接下来, 问题出现了, MD5每次所生成的值都是固定不变的。然而, 尽管它是单向生成, 没办法进行反向推导, 可要是借助碰撞方式, 针对字符串生成MD5之后与MD5值展开碰撞, 如此一来, 是不是就能够获取到该MD5所对应的字符串? 答案正确!确实是可行的, 也就是说, 要是某个用户的数据库出现了泄露情况, 当拿到密码库中的MD5后, 借助碰撞办法就能够把密码破解出来。紧接着, 新的问题又产生了, 既然是这样, 那似乎这项技术也就没什么实际用途了。并非这般情形, 运用一种细微的手法, 使这个碰撞方式失去效用, 此手法乃是"加盐", 那加盐究竟是什么呢?

"加盐"指的是给原密码增添额外的字符串, 接着再去生成MD5值, 如此便不存在破解的办法了, 除非获取到"加盐"字符串, 不过碰撞方法是要一个一个地重新计算MD5值之后再开展碰撞对比的, 难度也是极大的。那么来瞧下面的代码吧:

例:MD5密码认证,带"加盐"方法

brush:py; 复制代码
import hashlib
import os
salt = '!任#意%字^符@'  # 定义加盐字符串
# salt = os.urandom(16).decode()  # 函数定位:返回一个有16个byte那么长的一个string,然后很适合用于加密。
pwd = input('>>>')
md5_pwd = hashlib.md5()
md5_pwd.update((pwd+salt).encode('UTF-8'))  # 加盐
pwd = md5_pwd.hexdigest()
#pwd = hashlib.new('md5',(pwd+salt).encode('UTF-8')).hexdigest()   # 也可以这样简写哦。一句话搞定。

到这儿, 这一篇针对哈希模块详细揭晓的文章就讲述到这儿了, 更多与之相关的模块内容, 请去搜索脚本之家先前的文章, 或者持续浏览下面相关的文章 , 期望大家往后多多支持脚本之家!

相关推荐
chinesegf1 小时前
comfyui便携版的基础使用
python
OPEN-F1 小时前
ROS2系列教程:Gazebo插件(关节控制/IMU/激光雷达)
c++·python·数码相机·算法·机器人
临沂GEO1 小时前
芝麻开门GEO|AI数字化新趋势,助力企业线上长效增长
大数据·人工智能·python
梦想不只是梦与想2 小时前
大模型系列(二):技术基础与核心能力
python·大模型·token
AC赳赳老秦2 小时前
农产品公开数据应用:OpenClaw 抓取农产品价格、产销公开数据,实现农产品行情动态监测
java·c语言·javascript·python·php·deepseek·openclaw
万年咸鱼2 小时前
Java PrintStream 详解:从基础用法到实战技巧
java·开发语言·python
cui_ruicheng3 小时前
FastAPI 应用开发(二):请求响应、Pydantic 模型与依赖注入
python·fastapi·web
DeepVisionary3 小时前
SoundHound 完成收购 LivePerson:股权对价 4300 万美元,实际总成本约 3.04 亿
python·自动化
deepseek233 小时前
Google Gemini Agentic Video 上线:88% 少 token 的主动取样如何改写长视频理解
python·多模态·ai agent·gemini·视频理解