Python的哈希hashlib模块详细解读

 更新时间:2023年09月22日 09:53:17   作者:生有涯,知无涯  
这篇文章主要介绍了Python的哈希hashlib模块详细解读,hashlib是一个提供字符加密功能的模块,包含MD5和SHA的加密算法,具体支持md5,sha1, sha224, sha256, sha384, sha512等算法, 该模块在用户登录认证方面应用广泛,对文本加密也很常见,需要的朋友可以参考下

1.hashlib模块

hashlib是一个提供字符加密功能的模块,包含MD5和SHA的加密算法,具体支持md5,sha1, sha224, sha256, sha384, sha512等算法。 该模块在用户登录认证方面应用广泛,对文本加密也很常见。

**哈希算法(Hash Algorithm):**简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数;哈希算法是一种压缩映射,也就是说散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值

哈希的特点:

1)只要输入一样,输出的哈希必然一样(用于文件、下载完整性校验);

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

3)只要使用的哈希算法不变,无论校验的内容是否一样,得到的哈希长度是固定的.

加盐

加盐(salt)加密(简称“加盐”)是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联

无论何时只要口令改变,随机数就改变;随机数以未加密的方式存放在口令文件中,这样每个人都可以读;不再只保存加密过的口令,而是先将口令和随机数连接起来然后一同加密,加密后的结果放在口令文件中

2.基本调用

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, sha224, sha256, sha384, sha512

例:

new_md5 = hashlib.md5()   
new_sha1 = hashlib.sha1()  
new_sha256 = hashlib.sha256()

简单调用:

new_md5 = hashlib.new('md5',b'字符串').hexdigest()
#或者
new_md5 = hashlib.md5(str(time.time().encode('utf-8')).hexdigest()

注意: 向对象中传入字符串时,必须为编码类型。可以使用字符串前b’ '的方法或使用.encode(‘UTF-8’)的方法,使字符串变为bytes类型。

下面我们将引入一个简单的实力来说明最常用的MD5算法在实际中的应用。在引入实力前,让我们先对MD5的基本特性有个认识。

3.扩展 md5算法的特点

  • 压缩性:任意长度的数据,算出的MD5值的长度都是固定的。
  • 容易计算:从原数据计算出的MD5值很容易。不管数据多大,很快就能算出一串MD5字符串来。
  • 抗修改性:对原数据进行任何改动,哪怕修改任何一个字节,生成的MD5值也有会很大的区别。
  • 强抗碰撞:已知原数据和MD5,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

好啦,那我们已经知道了MD5算法的特点。那么问题来了,MD5既然每次生成的值都是固定的。那么虽然是单向生成不可反推,但是如果通过碰撞方法对字符串生成MD5后与MD5值碰撞,是不是就会得到MD5对应的字符串了呢?答对了!这样是可以的,换句话说,如果某用户数据库泄露了,拿到了密码库中的MD5就能通过碰撞的方法将密码破解出来。那么问题又来了,既然这样,那也没有什么用了啊。。非也,让我们用一个小小的技巧,让这个碰撞方法失效。这个方法就是“加盐”,什么是加盐呢?

“加盐”就是对原密码添加额外的字符串,然后再生成MD5值,这样就没有办法进行破解了,除非拿到“加盐”字符串,但碰撞方法也是需要一个一个重新计算MD5值后再进行碰撞对比的,难度也是极其大的。那么看下面的代码吧:

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

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()   # 也可以这样简写哦。一句话搞定。

到此这篇关于Python的哈希hashlib模块详细解读的文章就介绍到这了,更多相关Python的hashlib模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 绘制拟合曲线并加指定点标识的实现

    python 绘制拟合曲线并加指定点标识的实现

    这篇文章主要介绍了python 绘制拟合曲线并加指定点标识的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等

    python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等

    这篇文章主要为大家详细介绍了python打印9宫格、25宫格等奇数格,满足横竖斜相加和相等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Python中字符串转换为列表的常用方法总结

    Python中字符串转换为列表的常用方法总结

    本文将详细介绍Python中将字符串转换为列表的八种常用方法,每种方法都具有其独特的用途和适用场景,文中的示例代码讲解详细,感兴趣的可以了解下
    2023-11-11
  • 10个杀手级应用的Python自动化脚本

    10个杀手级应用的Python自动化脚本

    重复的任务总是耗费时间和枯燥的。如果逐一裁剪100张照片,或者做诸如Fetching APIs、纠正拼写和语法等任务,所有这些都需要大量的时间。为什么不把它们自动化呢?本文详细介绍了10个Python自动化脚本,感兴趣的小伙伴可以阅读一下
    2023-03-03
  • Python 语法错误:"SyntaxError: invalid character in identifier"原因及解决方法

    Python 语法错误:"SyntaxError: invalid charac

    本文给大家分享Python 语法错误:“SyntaxError: invalid character in identifier“,原因及解决方法,文末给大家补充介绍了Python出现SyntaxError: invalid syntax的原因总结,感兴趣的朋友跟随小编一起学习吧
    2023-02-02
  • Python爬虫设置代理IP的方法(爬虫技巧)

    Python爬虫设置代理IP的方法(爬虫技巧)

    这篇文章主要介绍了Python爬虫设置代理IP的方法(爬虫技巧),需要的朋友可以参考下
    2018-03-03
  • Python入门_浅谈字符串的分片与索引、字符串的方法

    Python入门_浅谈字符串的分片与索引、字符串的方法

    下面小编就为大家带来一篇Python入门_浅谈字符串的分片与索引、字符串的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Python爬虫实现Cookie模拟登录

    Python爬虫实现Cookie模拟登录

    这篇文章主要介绍了Python爬虫实现Cookie模拟登录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Pycharm配置Qt Designer及Pyuic的实现方法

    Pycharm配置Qt Designer及Pyuic的实现方法

    本文介绍了如何安装Qt designer和Pyuic以及他们的基本用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • tensorflow1.0学习之模型的保存与恢复(Saver)

    tensorflow1.0学习之模型的保存与恢复(Saver)

    这篇文章主要介绍了tensorflow1.0学习之模型的保存与恢复(Saver) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论