图像去重技术:MD5哈希在自动化中的应用

2024-06-15 23:36

本文主要是介绍图像去重技术:MD5哈希在自动化中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、MD5的介绍

二、常见的MD5哈希用途

三、hashlib库介绍

四、实际应用-图片去重


前言

MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,它可以产生一个128位(16字节)的哈希值,通常用一个32位的十六进制字符串表示。如果两张图像的内容完全相同,那么它们经过MD5哈希处理后得到的哈希值也会是相同的。

MD5哈希函数的主要特点是它将任意长度的数据转换成一个固定长度的哈希值,并且理论上,不同的输入数据产生相同哈希值的概率非常低(尽管不是完全不可能)。因此,MD5常被用于验证文件的完整性,比如确保文件在传输过程中没有被篡改。

一、MD5的介绍

MD5的设计目标是快速且能够产生一个128位(16字节)的哈希值,通常表示为32位的十六进制字符串。MD5的数学原理主要基于以下几个方面:

1. 位操作:MD5使用基本的位操作,包括AND、OR、XOR、NOT以及位移操作。这些操作对输入数据的位进行处理,以产生哈希值。

2. 主循环结构:MD5算法的核心是一个循环结构,它将输入数据分成512位的块,并逐个处理这些块。每个块的处理包括四个主要的函数(F, G, H, I),这些函数使用不同的逻辑运算和常量。

3. 填充:在处理之前,原始数据需要被填充到一个合适的长度,通常是使其长度为448模512的倍数。填充方案是先添加一个1位,后面跟着若干个0位,最后是一个64位的原始数据长度表示。

4. 初始化向量:MD5算法开始时使用一个固定的128位初始化向量,这个向量在每次哈希计算时都会用到。

5. 消息调度:在每个512位的数据块中,MD5算法将数据分成16个32位的子块,并按照一定的顺序进行处理。

6. 非线性变换:MD5算法中的四个主要函数(F, G, H, I)是设计来提供非线性特性的,以增加算法的复杂性和抵抗线性攻击。

7. 迭代过程:MD5算法通过迭代过程,将数据块、常量和当前的哈希值结合起来,产生新的哈希值。这个过程在算法中重复多次,以确保哈希值的均匀分布。

8. 最终输出:经过一系列的迭代和变换后,算法最终输出一个128位的哈希值,通常以32位十六进制字符串的形式展示。

然而,MD5也有一些安全上的缺陷,它容易受到多种攻击,如碰撞攻击,因此在需要高安全性的场合,推荐使用更安全的哈希算法,如SHA-256。尽管如此,对于大多数非安全关键的应用,MD5仍然是一个快速且有效的选择。

二、常见的MD5哈希用途

1. 文件完整性校验:MD5可以用于验证文件是否在传输或存储过程中被篡改。通过比较文件的MD5哈希值,可以快速检测文件是否发生了变化。

2. 数据加密:虽然MD5不再推荐用于需要高安全性的加密场景,但在某些低安全需求的场合,它仍然被用于数据的加密和保护。

3. 密码存储:在某些系统中,MD5曾被用于存储用户密码的哈希值。然而,由于MD5容易受到彩虹表攻击,现在更推荐使用更安全的哈希算法,如bcrypt。

4. 数字签名:在数字签名中,MD5可以作为消息的摘要,与公钥一起验证消息的完整性和来源。

5. 数据索引:在数据库和搜索引擎中,MD5可以用于快速索引和检索数据。

6. 软件分发:软件包或安装程序的MD5值可以用于验证下载过程中的文件完整性。

7. 网络安全:在某些网络安全协议中,MD5用于生成会话密钥或进行数据的快速校验。

8. 区块链技术:在区块链中,MD5有时用于生成交易或区块的简短标识符。

9. 内容分发网络(CDN):CDN使用MD5来识别和缓存内容,以提高内容分发的效率。

10. 软件版本控制:软件版本控制系统中,MD5可以用于快速比较文件版本的差异。

三、hashlib库介绍

hashlib是 Python 的一个内置库,提供对各种不同哈希算法的支持,包括 MD5、SHA1、SHA256、SHA512 等。哈希算法是一种将任意长度的数据转换为固定长度的哈希值的方法,通常用于数据的完整性校验、密码存储、数据指纹等场景。

以下是 hashlib库的一些主要特点和使用方法:

1. 多种哈希算法:hashlib支持多种哈希算法,可以根据不同的安全需求选择适合的算法。

2. 简单易用的API:hashlib提供了简单直观的API,使得哈希计算变得非常容易。

3. 可读性和可写性:hashlib既可以处理二进制数据,也可以处理文本数据。对于文本数据,需要指定编码方式。

4. 更新模式:hashlib允许你使用 update()方法逐步更新哈希对象,这对于处理大文件或流数据非常有用。

5. 一次性计算:除了更新模式外,hashlib也支持一次性计算整个数据的哈希值。

6. 十六进制和二进制输出:hashlib可以以十六进制或二进制格式返回哈希值。

以下是使用 hashlib计算 MD5 和 SHA256 哈希值的示例代码:

import hashlib# 计算MD5哈希值
md5_hash = hashlib.md5()
md5_hash.update(b"Hello, World!")
print("MD5 hash:", md5_hash.hexdigest())# 计算SHA256哈希值
sha256_hash = hashlib.sha256()
sha256_hash.update(b"Hello, World!")
print("SHA256 hash:", sha256_hash.hexdigest())

其中使用 update()方法更新哈希对象的数据,最后使用 hexdigest()方法获取十六进制格式的哈希值。

四、实际应用-图片去重

实际应用,遍历指定目录中的所有图片文件,计算它们的MD5哈希值,并存储在字典中。如果发现相同的MD5值,只保留一个文件。

import os
import hashlibdef calculate_md5(file_path):"""计算文件的MD5哈希值"""hash_md5 = hashlib.md5()with open(file_path, "rb") as f:for chunk in iter(lambda: f.read(4096), b""):hash_md5.update(chunk)return hash_md5.hexdigest()def find_duplicate_images(directory):"""查找并删除具有相同MD5值的重复图片,只保留一个"""md5_dict = {}  # 存储MD5哈希值和对应文件路径的字典for root, dirs, files in os.walk(directory):for filename in files:if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):file_path = os.path.join(root, filename)md5 = calculate_md5(file_path)if md5 in md5_dict:# 如果MD5值已存在,则删除重复的文件os.remove(file_path)print(f"Removed duplicate image: {file_path}")else:# 否则,将文件路径添加到字典中md5_dict[md5] = file_path# 指定目录路径
directory_path = '/data/images'
find_duplicate_images(directory_path)

这篇关于图像去重技术:MD5哈希在自动化中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064901

相关文章

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

zoj3820(树的直径的应用)

题意:在一颗树上找两个点,使得所有点到选择与其更近的一个点的距离的最大值最小。 思路:如果是选择一个点的话,那么点就是直径的中点。现在考虑两个点的情况,先求树的直径,再把直径最中间的边去掉,再求剩下的两个子树中直径的中点。 代码如下: #include <stdio.h>#include <string.h>#include <algorithm>#include <map>#

usaco 1.3 Prime Cryptarithm(简单哈希表暴搜剪枝)

思路: 1. 用一个 hash[ ] 数组存放输入的数字,令 hash[ tmp ]=1 。 2. 一个自定义函数 check( ) ,检查各位是否为输入的数字。 3. 暴搜。第一行数从 100到999,第二行数从 10到99。 4. 剪枝。 代码: /*ID: who jayLANG: C++TASK: crypt1*/#include<stdio.h>bool h

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、