的哈希模块详细解读
时间更新至, 二零二三年, 九月二十二日, 上午九点五十三分十七秒, 作者名为, 生有涯, 知无涯。
这篇文章着重对哈希模块予以详细解读, 它是一个具备字符加密功能的模块, 其中涵盖了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() # 也可以这样简写哦。一句话搞定。
到这儿, 这一篇针对哈希模块详细揭晓的文章就讲述到这儿了, 更多与之相关的模块内容, 请去搜索脚本之家先前的文章, 或者持续浏览下面相关的文章 , 期望大家往后多多支持脚本之家!