详解Python3之数据指纹MD5校验与对比


Posted in Python onJune 11, 2019

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。

概述

MD5校验码通过散列函数计算而成,可以生成任何数据的数据“指纹”,即我们可以利用MD5将消息或者数据压缩成摘要,是的数据量变小,便于比较验证数据的完整和正确性。因为两个不同的文件几乎不可能拥有相同的MD5哈希值,任何对一个文件的非恶意变更都会导致其MD5哈希值改变。所以MD5哈希常用语检查文件完整性,尤其是检测文件传输、磁盘错误或其他情况文件的正确性。

MD5

在Python中我们利用内置模块hashlib即可完成MD5的实现和使用。

import hashlib

m = hashlib.md5()
# 假设文件内容
src = 'I like Python'
m.update(src.encode('utf-8'))
print(m.hexdigest())

示例结果:

17008b7417701b0c233b999d20c13f1d

文件验证

假设现有有两个文件,我们需要验证这两个文件是否一样

import hashlib


def out_md5(src):
  # 简单封装
  m = hashlib.md5()
  m.update(src.encode('utf-8'))
  return m.hexdigest()


with open('1.txt', 'r') as f:
  src = f.read()
  m1 = out_md5(src)
  print(m1)

with open('2.txt', 'r') as f:
  src = f.read()
  m2 = out_md5(src)
  print(m2)

if m1 == m2:
  print(True)
else:
  print(False)

示例结果:

bb0c1b519a0a2b8e6c74703e44538c60
43cb091db43a710d85ce45fb202438cd
False

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单的Python抓taobao图片爬虫
Oct 26 Python
Python下使用Psyco模块优化运行速度
Apr 05 Python
python实现线程池的方法
Jun 30 Python
python实现斐波那契数列的方法示例
Jan 12 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
python3实现多线程聊天室
Dec 12 Python
Python如何使用argparse模块处理命令行参数
Dec 11 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 Python
python实现最短路径的实例方法
Jul 19 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 Python
Python绘制地图神器folium的新人入门指南
May 23 Python
tensorflow中的梯度求解及梯度裁剪操作
May 26 Python
Python自动抢红包教程详解
Jun 11 #Python
python解压TAR文件至指定文件夹的实例
Jun 10 #Python
python pyinstaller 加载ui路径方法
Jun 10 #Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
Jun 10 #Python
python处理“
Jun 10 #Python
python-pyinstaller、打包后获取路径的实例
Jun 10 #Python
详解Python 切片语法
Jun 10 #Python
You might like
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
利用404错误页面实现UrlRewrite的实现代码
2008/08/20 Javascript
javascript 跳转代码集合
2009/12/03 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
自定义jQuery插件方式实现强制对象重绘的方法
2015/03/23 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
vue项目总结之文件夹结构配置详解
2017/12/13 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
vue视频播放暂停代码
2019/11/08 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
python创建临时文件夹的方法
2015/07/06 Python
Python编程判断这天是这一年第几天的方法示例
2017/04/18 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
HTML5的新特性(1)
2016/03/03 HTML / CSS
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
学校法制宣传月活动总结
2014/07/03 职场文书
2016年万圣节活动个人总结
2016/04/05 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis