检查两个图像文件是否相同..校验和或哈希值?

2023-12-25

我正在做一些图像处理代码,其中我从 URL 下载一些图像(如 BufferedImage)并将其传递到图像处理器。

我想避免将同一图像多次传递给图像处理器(因为图像处理操作的成本很高)。图像的 URL 端点(如果它们是相同的图像)可能会有所不同,因此我可以通过 URL 来防止这种情况。因此,我计划进行校验和或哈希来确定代码是否再次遇到相同的图像。

对于 md5 我尝试过Fast MD5 http://www.twmacinta.com/myjava/fast_md5.php,并且它为图像(一些示例)生成了 20K+ 字符长度的十六进制校验和值。显然,在数据库存储方面,存储这个 20K+ 字符的哈希值将是一个问题。因此我尝试了 CRC32(来自 java.util.zip.CRC32)。它确实生成了比哈希值小得多的长度校验和。

我确实了解校验和和哈希有不同的目的。出于上述目的,我可以只使用 CRC32 吗?它能解决目的还是我必须尝试比这两个更多的东西?

谢谢, 阿比


CRC 和 MD5 之间的区别在于,篡改文件以匹配“目标”MD5 比篡改文件以匹配“目标”校验和更困难。由于这对您的程序来说似乎不是问题,因此使用哪种方法并不重要。也许 MD5 可能会占用更多的 CPU 资源,但我不知道这种不同是否重要。

主要问题应该是摘要的字节数。

如果您以整数进行校验和,则意味着对于 2K 大小的文件,您将 2^2048 个组合拟合为 2^32 个组合 --> 对于每个 CRC 值,您将有 2^64 个可能匹配的文件它。如果您有 128 位 MD5,则可能有 2^16 种冲突。

计算的代码越大,发生冲突的可能性就越小(假定计算的代码分布均匀),因此比较就越安全。

无论如何,为了最大限度地减少可能的错误,我认为第一个分类应该使用文件大小...首先比较文件大小,如果它们匹配,则比较校验和/哈希。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查两个图像文件是否相同..校验和或哈希值? 的相关文章

随机推荐

  • 使用 NIB 文件会导致性能损失吗?

    我很想知道是否有人有经验比较 iPhone 应用程序与 NIB 中布局的视图与完全以编程方式布局的视图 即实例化 UITextView 将其添加到视图 实例化 UIButton 将其添加到视图 的加载时间性能 如果我想要加载一个简单的应用程
  • numpy 有没有办法测试矩阵是否为酉矩阵

    我想知道 numpy 中是否有任何函数可以确定矩阵是否为酉矩阵 这是我写的函数 但它不起作用 如果你们能发现我的函数中的错误和 或告诉我另一种方法来确定给定矩阵是否是单一的 我将不胜感激 def is unitary matrix np n
  • 如何在 C++17 中读取 UTF-16 文本文件

    我对 C 很陌生 我想在 Visual Studio 2019 中读取 C 17 中的 UTF 16 文本文件 我在互联网上尝试了几种方法 包括StackOverflow 但没有一个起作用 并且其中一些无法编译 我认为它们只支持较旧的编译器
  • 如何在 numpy 或 pytorch 中向量化自定义算法?

    假设我有两个矩阵 A size k x m B size m x n 使用自定义操作 我的输出将是k x n 此自定义操作不是行之间的点积A和列B Suppose该自定义操作定义为 对于第 I 行A和第 J 列B the i j输出的元素是
  • 指令解码器如何区分前缀和主操作码?

    我正在尝试了解 x86 指令编码格式 我读过的所有资料仍然让这个主题令人困惑 我开始有点了解它 但我无法理解的一件事是 CPU 指令解码器如何区分操作码前缀和操作码 我知道指令的整个格式基本上取决于操作码 当然还有操作码中定义的额外位字段
  • 在 Folium HeatMapWithTime 中显示日期、id 列和其他列

    我有一个这样的出租车频率数据集 ID Date Latitude Longitude Sample Mean 01 2019 10 09 40 431753 3 711294 0 1 03 2019 10 21 40 431753 3 71
  • 如何使用 HTML5 预加载页面?

    我记得读过有关使浏览器预加载页面的元标记的文章 又是什么标签 预取包含在W3C 规范名为 资源提示 http www w3 org TR resource hints dfn prefetch 它在 Firefox Chrome IE 11
  • pygame.display.init() 对于非 root 用户失败

    Tl dr 我需要使用pygame但由于权限问题 它无法以普通用户身份初始化屏幕帧缓冲驱动程序 根可以做pygame display init 但不是用户 用户位于 视频 组中 可以在其上书写 dev fb0 用户缺少什么权限pygame
  • ionic cordova 运行 ios - 导出失败,代码 65

    我已经完成了对这个错误的研究 尝试运行时出现以下错误ionic cordova run ios livereload cordova Non system Ruby in use This may cause packaging to fa
  • 将超类合并到 Guava Objects.hashcode() 实现中的正确方法?

    可能是个愚蠢的问题 但我不想搞砸 假设我有两个 Java 类 Class1 and Class2 where Class2 extends Class1 我想覆盖Object hashcode 两个类都使用番石榴 对于超类 我有 Overr
  • 保持纵横比的 Div,同时填充其容器,该容器也保持纵横比并填充屏幕

    我正在尝试创建一个设置 其中有一个容器 参见下图 蓝色 该容器保持 16 9 的宽高比 并且始终适合屏幕 始终保持尽可能大的大小 同时完全保留在浏览器窗口中 然后它内部有一个 div 绿色 它也保持 16 9 的长宽比并填充外部容器 我需要
  • Android - 如何以批处理模式接收传感器数据?

    奇巧推出传感器批处理 https source android com devices sensors batching html 但我无法在批处理模式下从传感器读取数据 My code public class MainActivity
  • 在打字稿中找不到名称“省略”

    背景 我正在定制我的index d ts文件于src types index d ts 我需要像下面这样合并我的类型 src types index d ts declare namespace Admin interface Initia
  • 不要在 Rails 生成控制器上创建视图文件夹

    当您运行时 有没有一种方法可以使用常用的生成器配置来关闭视图文件夹和操作模板的创建rails generate controller 我在任何地方都找不到选项和代码here https github com rails rails blob
  • 如何在 R 中使用 system() 或 shell() 执行 git-bash 命令

    我想运行一些命令git bash壳通过system or shell R 中的函数 我在 Windows 上 默认 shell 是命令提示符 有什么办法可以切换 shellsystem to git bash 谢谢 If your PATH
  • 在 C++ 中重塑张量

    TensorFlow 的 C 接口似乎没有 reshape 方法 有谁知道如何转换 例如 A B C D into A B C D 看起来唯一的方法就是使用 Eigen 然而 那里的文档非常薄弱 代码是模板地狱 不容易解析 检查重塑张量是否
  • 参考和盒子之间的可变性差异

    我试图了解 Rust 指针类型及其与可变性的关系 具体来说 声明一个保存指针且本身可变的变量的方法 即可以指向其他内存 并声明该变量数据本身是可变的 即可以改变through指针变量的值 这就是我对简单引用工作方式的理解 let mut a
  • 将 FlowDocument 转换为 PDF 的最佳方法是什么

    您会如何建议我将 FlowDocument 转换为 PDF 以附加到电子邮件中 FlowDocument 是动态的 而不是静态的 我希望能够将 PDF 作为 byte 存储在内存中 而不是存储在磁盘上 但这是可以协商的 感谢您的帮助 我假设
  • 情节小提琴情节太窄

    我正在尝试根据绘图文档示例构建多个分割小提琴图 我不知道为什么小提琴被水平地弄脏了 我包括了 violinmode overlay 这是另一个人曾经建议的 但它没有什么区别 下面是我正在使用的代码 lengthlm go Figure le
  • 检查两个图像文件是否相同..校验和或哈希值?

    我正在做一些图像处理代码 其中我从 URL 下载一些图像 如 BufferedImage 并将其传递到图像处理器 我想避免将同一图像多次传递给图像处理器 因为图像处理操作的成本很高 图像的 URL 端点 如果它们是相同的图像 可能会有所不同