ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

比MD5或SHA256更快地寻找C#哈希

2019-06-12 21:51:47  阅读:387  来源: 互联网

标签:c cryptography hash md5 sha256


我试图找到比SHA256更快的东西.我有超过10亿条记录需要哈希并验证它们是否是唯一的.我目前通过MD5运行它,然后通过sha256看起来相当快,以避免碰撞.按顺序运行它们似乎给了我一点性能提升,但我仍然需要它更快.我正在寻找在c#或一些伪代码中完成的一些哈希的名称或示例,因此我可以在c#中重新创建它.

解决方法:

这里的答案中有很多可疑的信息.您使用加密技术标记了您的问题并仅提及加密哈希函数,但听起来您并不真正需要加密安全性,特别是因为您说:

I have over 1 billion records I need to hash and verify if they are unique.

cryptographic hash function有四个属性:

  • it is easy to compute the hash value for any given message
  • it is infeasible to generate a message that has a given hash
  • it is infeasible to modify a message without changing the hash
  • it is infeasible to find two different messages with the same hash.

您真的只对第一个质量感兴趣,而且唯一性是较小规模的要求,仅部分与加密安全性的其他三个属性相关.

你为什么在乎?

加密安全性存在开销.你不需要它,你对速度感兴趣,为什么不跳过它呢? MD5和SHA系列的哈希宽度无疑是足够大的.

查看维基百科上的hash functions列表,或查看normal hash functions上的文章.更重要的是,内置.NET哈希函数有什么问题?您是否尝试过推迟使用Object.GetHashCode()方法? MSDN参考有很多关于使用哈希函数的说法.您没有对要散列的数据说太多,因此很难说输出在对象之间是否是唯一的.你是如何将物体送入MD5的哈希?我认为你正在采用它的二进制表示.可以使用类似的方法来使用内置的非加密散列函数.

您可能会担心内置哈希函数的唯一性.它们只返回一个常规的int,即2 ^ 32,只比你正在使用的数据集大4倍.但是,您始终需要有哈希函数的备份计划.碰撞是不可行的,并非不可能.标准后备是执行更昂贵的比较,通常是参考比较和字段值比较.

如果你不准备对你的哈希输出做一个精确的比较,你基本上都会倒数,直到你得到误报.这对你来说可能不是什么大问题:只有你可以判断它的缺点是什么.

另外,执行另一个散列函数计算可能不比直接比较快得多.在所有方面,你最好还是选择坚定的事情并进行冗长的直接比较.

另一种常见的防冲突技术是使用多个键.因此,如果您的数据点有几个大的子组件,则您可以独立地进行哈希和比较.如果它有一些大的和一些小的组件(比如说一些简单的数字类型),你可以对大的组件进行哈希处理并对小组件进行直接比较.如果他们有一些容易采用序数的数据(比如字符串的长度或某些容器的大小),你可以对这些位进行直接比较.

如果这对你不起作用,请看一下wiki上列出的其他哈希函数的实现.这是一个pretty good reference for MurmerHash3,可以计算32位或128位哈希值.列表中还有其他哈希函数,它们具有较长的哈希宽度,并且还具有可用的C#库.但正如该引用所指出的,Murmurhash比MD5和SHA函数更快,尽管它没有直接比较我上面提到的Object.GetHashCode方法.

标签:c,cryptography,hash,md5,sha256
来源: https://codeday.me/bug/20190612/1228670.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有