散列字符串以进行重复检测

时间:2014-01-28 17:24:08

标签: c# hash

我正在编写一个存储SWIFT消息类型的C#API。我需要编写一个接受整个字符串消息并创建它的散列的类,将此散列存储在数据库中,这样当处理新消息时,它会创建另一个散列,并检查数据库中的散列。

我有以下

 public static byte[] GetHash(string inputString)
 {
     HashAlgorithm algorithm = MD5.Create();  // SHA1.Create()
     return algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
 }

我需要知道,如果这样做的话?

全球评论 *

因此,我在安全网络中收到文件,因此我们可以完全控制其有效性 - 我需要控制的是重复付款。我可以将记录拆分为相应的标签元素(SWFIT术语),然后单独检查它们,但这需要与数据库中的记录进行比较,并且成本不会发生。

我需要检查整个邮件是否与已处理的邮件重复,这就是我使用此方法的原因。

2 个答案:

答案 0 :(得分:3)

您可以按Dictionary实现它的方式实现它。水桶系统。

在数据库中有一个哈希值,并存储原始数据。

----------------
| Hash | Value |
----------------

通过首先搜索哈希值,查询会更快,如果有多个匹配,因为在某些时候将使用MD5,您可以迭代它们,并将它们更紧密地匹配以查看如果他们真的是一样的话。

但正如Michael J. Gray所说,在较小的数据集上,碰撞的概率非常小。

答案 1 :(得分:2)

这取决于你想做什么。如果您期望消息永远不会被故意篡改,即使是CRC64也可以。

如果您希望.NET提供的解决方案速度快且不提供加密安全性,那么MD5就可以了,并且可以满足您的需求。

如果您需要确定某条消息是否与另一条消息不同,并且您希望有人篡改传输中的数据,并且可能会使用bit twiddling技术修改以强制发生哈希冲突,则应使用SHA-256或SHA-512。

除非您正在散列数十亿条消息或有人篡改传输中的数据,否则

碰撞不应该成为问题。如果有人篡改了传输中的数据,则会遇到更大的问题。