适用于字节数组的哈希码方法?

2023-11-21

数组的最佳哈希方法是什么byte?

这些数组是序列化的类对象,包含通过 TCP/IP 在应用程序之间传递的 jpeg 图像。

数组大小约为200k。


任何内置的散列函数都可以;根据您对碰撞的关心程度,您可以选择以下选项(从最多碰撞到最少碰撞):

  • MD5
  • SHA1
  • SHA256
  • SHA384
  • SHA512

它们使用起来非常简单:

var hash = SHA1.Create().ComputeHash(data);

奖励分数:如果您不关心安全性(我认为您不关心安全性,因为您正在获取图像的哈希值),您可能需要研究 Murmur 哈希,它是为内容哈希而不是安全哈希而设计的(因此是快多了)。然而,它不在框架中,因此您必须找到一个实现(您可能应该选择 Murmur3)。

Edit:如果您正在寻找HASHCODE对于 byte[] 数组,这完全取决于您,它通常由位移(按素数)和异或组成。例如。

public class ByteArrayEqualityComparer : IEqualityComparer<byte[]>
{
    public static readonly ByteArrayEqualityComparer Default = new ByteArrayEqualityComparer();
    private ByteArrayEqualityComparer() { }

    public bool Equals(byte[] x, byte[] y)
    {
        if (x == null && y == null)
            return true;
        if (x == null || y == null)
            return false;
        if (x.Length != y.Length)
            return false;
        for (var i = 0; i < x.Length; i++)
            if (x[i] != y[i])
                return false;
        return true;
    }

    public int GetHashCode(byte[] obj)
    {
        if (obj == null || obj.Length == 0)
            return 0;
        var hashCode = 0;
        for (var i = 0; i < obj.Length; i++)
            // Rotate by 3 bits and XOR the new value.
            hashCode = (hashCode << 3) | (hashCode >> (29)) ^ obj[i];
        return hashCode;
    }
}
// ...
var hc = ByteArrayEqualityComparer.Default.GetHashCode(data);

EDIT:如果您想验证该值没有更改,您应该使用CRC32.

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

适用于字节数组的哈希码方法? 的相关文章

随机推荐

  • 子 pom 中存在重复的artifactId

    我希望父 pom 为众多子 pom 定义一些要继承的属性 但是 当我尝试在父 pom 中的这些属性之一中使用 artifactId 时 它会在子项的有效 pom 中重复 下面是非常基本的示例 假设我拥有 poms 所需的所有有效字段 gro
  • ModelSim-Altera 错误

    我正在使用 Ubuntu Linux 14 04 LTS 和 Altera Quartus 15 0 网络版 由于许可错误 我很难模拟我的设计 我正在设计一个 LCD driverVEEK MT友晶科技的液晶触摸屏旋风 IV EP4CE11
  • 如何使用freopen_s函数

    为了从文本文件读取输入 我编写了以下代码 int main int x ifndef ONLINE JUDGE freopen input txt r stdin endif scanf d x printf d n x system pa
  • 为什么“git clone”不采用 refspec?

    看来很多人都去换了git clone与组合git init git fetch 这看起来相当愚蠢 不幸的是像 Jenkins 这样的工具不会为你做这件事 那么为什么 git clone 不像 git fetch 那样采用 refspec 呢
  • 如何在 Ruby 中获取 Enumerable 的第 n 个元素

    例如 要返回第 10 000 个质数 我可以编写 require prime Prime first 10000 last gt 104729 但是创建一个巨大的中间数组 只是为了检索它的最后一个元素感觉有点麻烦 鉴于 Ruby 是一种如此
  • 强制调用父方法

    是否有 或模式 强制调用父方法 我有一个像这样的抽象类 abstract class APrimitive public function validate Do some stuff that applies all classes th
  • 多个main方法有什么用?

    c 使我们能够使用方法定义多个类 Main方法是程序执行的入口点 那么为什么我们要拥有多个地方来执行程序呢 多个 main 方法相对于单个 main 方法有什么优点 Edit 示例 cs Class Example 1 public sta
  • 打字稿用只读属性初始化对象

    有没有办法初始化对象文字并同时声明其具有只读属性的接口 例如 let a readonly b 2 readonly c 3 您可以使用as const断言 let a b 2 c 3 as const typed as readonly
  • 为什么我的异步 ASP.NET Web API 控制器阻塞主线程?

    我有一个 ASP NET Web API 控制器thought将异步操作 控制器设计为在第一个请求时休眠 20 秒 但立即为任何后续请求提供服务 所以我预计的时间表是这样的 提出要求1 提出要求2 提出要求3 要求 2 次退货 请求 3 个
  • 如何在 Ruby 中交错不同长度的数组

    如果我想在 Ruby 中交错一组数组 并且每个数组的长度相同 我们可以这样做 a zip b zip c flatten 但是 如果数组的大小可以不同 我们如何解决这个问题呢 我们可以做这样的事情 def interleave args r
  • UITextView - 根据 SwiftUI 中的内容调整大小

    我试图弄清楚如何使 UITextView 的大小取决于它在 SwiftUI 中的内容 我将 UITextView 包裹在UIViewRepresentable如下 struct TextView UIViewRepresentable Bi
  • 如何以编程方式截取屏幕截图(Swift、SpriteKit)

    我尝试了建议的方法 但输出是白色的空白屏幕截图 这让我假设我没有在视图中添加任何内容 以下是我向视图添加图形的方法 addChild 方法随 SpriteKit 一起提供 它接受 SKSpriteNodes addChild backgro
  • 为什么安装 Visual Studio 2008 后,catch(TException) 处理块行为在调试器下有所不同?

    考虑下面的控制台应用程序 该应用程序具有一个带有通用捕获处理程序的方法 用于捕获类型的异常TException 当此控制台应用程序使用 调试 配置构建并在 Visual Studio 调试器下执行 即通过 vshost exe 时 在 Vi
  • h1 标签类别(备用)

    我知道 h1 标签对于 SEO 很重要 所以我所有的标题都是 H1 太棒了 现在 我需要在某些页面上有一个稍微不同的标题 作为文本的第一行 通常 我只是将 h1 复制为 h2 并交替 问题 是否可以在标题标签中添加一个类 我尝试过但没有成功
  • 是否可以在handlebars.js模板中使用JavaScript

    描述说明了一切 如何将 JavaScript 脚本放入车把模板中 我想为我的网站制作一个动态 Paypal 按钮
  • PyQt5:对象没有属性“连接”

    我目前正在关注thisPyQt 中线程的教程 代码来自here 由于它是用 PyQt4 和 Python2 编写的 因此我调整了代码以使其能够与 PyQt5 和 Python3 一起使用 这是 gui 文件 newdesign py cod
  • 优化 ORDER BY

    我正在尝试优化这个排序查询posts by reputation字段 第一个 然后id场 第二 如果没有第一个字段查询 则需要约 0 250 秒 但如果有第一个字段查询 则需要约 2 500 秒 意味着慢了 10 倍 太糟糕了 有什么建议吗
  • 我可以得到Python中“print”语句的输出吗?

    pythonw exe 没有控制台 所以我看不到 print 的输出 但我的程序在 python exe 中正常 在 pythonw exe 中失败 我只想查看 python 解释器的日志和我的 print 语句打印的日志 这可行吗 您可以
  • 如何将 Nginx IP 附加到 Kubernetes Nginx Ingress Controller 中的 X-Forwarded-For

    我想知道 如何将 Nginx IP 附加到 X Forwarded For 我在 Ingress 注释中添加了片段 apiVersion networking k8s io v1beta1 kind Ingress metadata nam
  • 适用于字节数组的哈希码方法?

    数组的最佳哈希方法是什么byte 这些数组是序列化的类对象 包含通过 TCP IP 在应用程序之间传递的 jpeg 图像 数组大小约为200k 任何内置的散列函数都可以 根据您对碰撞的关心程度 您可以选择以下选项 从最多碰撞到最少碰撞 MD