Python中hashlib模块详解 - vip共享吧
  • 网站首页
  • IT技术笔记
    • Java教程
    • MySql数据库
    • PHP开发
    • Python教程
    • JavaScript
    • SEO优化
    • 常用工具
  • 好资源福利
    • 会员账号共享
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 史上今日
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们


导航菜单
  • 网站首页
  • IT技术笔记
    • Java教程
    • MySql数据库
    • PHP开发
    • Python教程
    • JavaScript
    • SEO优化
    • 常用工具
  • 好资源福利
    • 会员账号共享
  • 网站模板源码
    • 小程序源码
    • 网站源码
  • 共享网络资源
  • 更多功能
    • 留言吐槽
    • 文章归档
    • 我的邻居
    • 史上今日
    • 视频解析
    • 高清壁纸
    • 公告动态
    • 广告合作
    • 关于我们
Python

Python中hashlib模块详解

2024/9/5 韩俊  Python教程 996 0

Python 的 hashlib 提供了常见的摘要算法,如 MD5,SHA1 等等,摘要算法又称哈希算法,散列算法,该算法通过一个函数,把任意长度的数据转换为一个长度固定的数据串。

比如我们在网上发送信函,以防止内容被篡改,可以对其进行摘要算法,然后对比发送前后的摘要算法的结果是否一致。

比如我们对应用程序进行升级,以防止升级的内容被篡改,或者丢失等等,我们可以对升级后的程序文件进行摘要算法来判断它的完整性和正确性。

使用 hashlib

使用 hashlib 模块的摘要算法 md5 函数计算一个数据内容的 md5 值,注意:无论被计算的数据有多大,计算出来的 md5 值的长度都是 32 位长度的字符。

import hashlib

mystr = "python".encode("utf8")
md5 = hashlib.md5()
md5.update(mystr)
mystrmd5 = md5.hexdigest()      # 对 mystr 进行 md5 运算
print(len(mystrmd5))            # 32

mystrxx = "我爱python,啦啦啦".encode("utf8")
md5xx = hashlib.md5()
md5xx.update(mystrxx)
mystrxxmd5 = md5xx.hexdigest()  # 对 mystrxx 进行 md5 运算
print(len(mystrxxmd5))          # 32

比如我们在网上发送信函,以防止内容被篡改,可以对其进行摘要算法,对比发送前后的摘要算法的结果是否一致。

import hashlib

mystr = "python".encode("utf8")  # 这是我们的信件内容
md5 = hashlib.md5()
md5.update(mystr)
mystrmd5 = md5.hexdigest()  # 我们把信件内容 mystr,和信件的 md5 一块通过网络发送给对方

################## 对方收到信件内容后 ##################
mystrxx = "Python".encode("utf8")      # 我们收到的信件内容,假定小写字母 p 被网络黑客篡改为大写字母 P
md5xx = hashlib.md5()
md5xx.update(mystrxx)
mystrxxmd5 = md5xx.hexdigest()

if mystrmd5 != mystrxxmd5:
    print("风险警告:内容被篡改")
else:
    print("收到正确的信件内容")

我们可以对任何文件计算其 md5 值,同样我们也可以对图片计算 md5,来判断其完整性和正确性。 比如下面两张图片,我们肉眼看不出来任何差别,实际上我在第二张图片如花的头发出点了一个黑点。

from urllib import request
import ssl
import hashlib

context = ssl._create_unverified_context()
ruhuaurl_one = "https://www.birdpython.com/static/img/python3-lession/12/12-1-1.png"
rst = request.urlopen(ruhuaurl_one, context=context)
ruhuaimg_one = rst.read()           # 第 1 张如花图片的数据

ruhuaurl_two = "https://www.birdpython.com/static/img/python3-lession/12/12-1-2.png"
rst = request.urlopen(ruhuaurl_two, context=context)
ruhuaimg_two = rst.read()           # 第 2 张如花图片的数据


md5one = hashlib.md5()
md5one.update(ruhuaimg_one)
ruhuaimg_one_md5 = md5one.hexdigest()  # 第 1 张如花图片的 md5

md5two = hashlib.md5()
md5two.update(ruhuaimg_two)
ruhuaimg_two_md5 = md5two.hexdigest()  # 第 2 张如花图片的 md5

if ruhuaimg_one_md5 != ruhuaimg_two_md5:
    print("两张图片不一样")
else:
    print("两张图片一样")


比如我们对应用程序进行升级,升级的文件很多(好几个 G),我们想一下子对所有文件计算出 md5, 就需要读入几个 G 文件到内存,可能会撑爆内存,这样显然是很 low 的方法。 对于这种数据量很大,我们可以分块多次调用 update,来对比最后计算的结果是不是一样的。

import hashlib

mystr = "我是python网站的图片...巴拉巴拉...".encode("utf8")     # 假设这是升级的文件 a
mystrtwo = "我是python网站的视频...巴拉巴拉...".encode("utf8")  # 假设这是升级的文件 b

md5 = hashlib.md5()
md5.update(mystr)
md5.update(mystrtwo)

mystrmd5 = md5.hexdigest()  # 文件 a 和 文件 b 的 md5
print(mystrmd5)

注意:md5 的意义所在,主要用于防篡改,也就是校验文件的一致性,我们不建议用作加密使用(因为无法通过摘要反推明文)。 但是它的单向计算特性决定了可以在不存储明文口令的情况下验证用户口令。

本节重要知识点

会使用 md5 模块。

弄明白 md5 使用的场景,不要作为数据加密使用。

点赞:0 分享

上一篇
Python图像处理PIL库详解
下一篇
Python中HTMLParse模块详解
作者头像 作者名称 作者性别
韩俊

热门推荐

1 python动态绑定属性和方法
2 Python3装饰器
3 Python中@property的介绍与使用
4 Python3生成器
5 python中base64库详解
6 Python3推导式

评论列表

取消回复

    •  
      Login

      韩俊

      趁你现在还有时间,尽你自己最大的努力,努力做成你最想做的那件事,成为你最想成为的那种人,过着你最想过的那种生活。这个世界永远比你想的要更精彩,不要败给生活。

      退出登陆
      • 10076文章
      • 455评论
      • 80微语
  • 广告赞助

  • 二零二五年07月
    一二三四五六日
     123456
    78910111213
    14151617181920
    21222324252627
    28293031   
  • 分类

    • 网站模板源码
    • IT技术笔记
    • 好资源分享
    • 共享网络资源
  • 最新文章

      • 分享各大最新影视资源采集站网址合集资源共享
        • 经典的黄句子
          • 迷雾通:免费使用的VPN软件
            • 宝塔如何配置SSH密钥,并使用WinSCP工具远程连接服务器
              • 女人高情商祝福语简短
                • 京东外卖商户入驻指南及详细入驻攻略
                  • git教程及git常用命令指南
                    • 七一活动经典句子
  • 热门文章

    • 酷狗音乐VIP账号 酷狗音乐会员账号共享2017.01.29更新
    • 芒果tv vip会员账号 芒果tv会员账号共享2017.01.29更新
    • 爱奇艺vip账号 爱奇艺/PPS会员账号共享2016.12.12更新
    • 优酷/土豆vip会员账号 优酷会员账号共享2017.01.29更新
    • 活动:免费获得爱奇艺VIP/PPS会员账号50天以上的使用权!
    • 酷我音乐VIP账号 酷我音乐会员账号共享2016.12.31更新
    • 暴风影音会员账号 暴风影音会员账号共享2016.12.31更新
    • m1905会员账号 m1905会员账号共享2016.10.21更新
  • 最新评论

    • https://www.vipshare8.com/content/templates/meta/Static/images/tx/10.jpg

      你丫的 文章写得太好了 支持下!![F3...

    • https://www.vipshare8.com/content/templates/meta/Static/images/avatar.jpg

      很棒!刚在某网站看到这个,很欣赏,可惜下...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=3861064027

      呃呃呃 oooo

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了111:根据激活的时间有一年的有效期!

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=792480561

      到2025就到期了吗?

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      [blockquote]打卡时间:16:...

    • https://www.vipshare8.com/content/templates/meta/Static/images/tx/7.jpg

      俊哥,想借用迅雷一用!但需要手机验证!看...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=3293901900

      感谢大大的分享

    • https://www.vipshare8.com/content/uploadfile/202103/thum-490d1614564497.png

      回复了好奥v:如果没有解析成功,可以切换接口...

    • https://www.vipshare8.com/content/templates/meta/Api/qqtx.php/?qq=131241242441

      现在视频解析网站怎么用不了啦?

  • 网站统计 I 当前在线:367人

    • 本站管理:1位
    • 用户总数:593位
    • 置顶文章:2篇
    • 日志总数:10076篇
    • 微语总数:80条
    • 评论总数:455条
    • 标签总数:83条
    • 页面总数:8页
    • 分类总数:14个
    • 链接总数:16条
    • 运行天数:3718天
    • 最后更新:7月1日
    • 登录
    • 注册
    • 找回
    Copyright © 2025vip共享吧网站地图 网站备案豫ICP备19004194号-1

    免责声明:本站资源仅供用于学习和交流,本站部分素材内容来源于网络,如有侵权/投稿等,请及时联系站长.

    • 首页
    • 秒懂百科 秒懂百科
    • 搜索
    • 史上今日

    大家都在搜

    • m1905会员账号
    • MySql
    • seo
    • 华数tv会员账号分享
    • 掌阅vip账号共享
    • 百度云会员账号共享
    • 腾讯视频会员账号
    • 咪咕会员账号共享
    • 飞卢小说会员账号
    • swoole
    • 秒懂百科
    • sem优化
    • 千图网会员账号共享
    • 酷狗VIP账号
    • JavaScript
    • 经典句子
    • 
    • 