我正在编写一个存储SWIFT
消息类型的C#API。我需要编写一个接受整个字符串消息并创建它的散列的类,将此散列存储在数据库中,这样当处理新消息时,它会创建另一个散列,并检查数据库中的散列。
我有以下
public static byte[] GetHash(string inputString)
{
HashAlgorithm algorithm = MD5.Create(); // SHA1.Create()
return algorithm.ComputeHash(Encoding.UTF8.GetBytes(inputString));
}
我需要知道,如果这样做的话?
全球评论 *
因此,我在安全网络中收到文件,因此我们可以完全控制其有效性 - 我需要控制的是重复付款。我可以将记录拆分为相应的标签元素(SWFIT术语),然后单独检查它们,但这需要与数据库中的记录进行比较,并且成本不会发生。
我需要检查整个邮件是否与已处理的邮件重复,这就是我使用此方法的原因。
答案 0 :(得分:3)
您可以按Dictionary
实现它的方式实现它。水桶系统。
在数据库中有一个哈希值,并存储原始数据。
----------------
| Hash | Value |
----------------
通过首先搜索哈希值,查询会更快,如果有多个匹配,因为在某些时候将使用MD5
,您可以迭代它们,并将它们更紧密地匹配以查看如果他们真的是一样的话。
但正如Michael J. Gray所说,在较小的数据集上,碰撞的概率非常小。
答案 1 :(得分:2)
这取决于你想做什么。如果您期望消息永远不会被故意篡改,即使是CRC64也可以。
如果您希望.NET提供的解决方案速度快且不提供加密安全性,那么MD5就可以了,并且可以满足您的需求。
如果您需要确定某条消息是否与另一条消息不同,并且您希望有人篡改传输中的数据,并且可能会使用bit twiddling技术修改以强制发生哈希冲突,则应使用SHA-256或SHA-512。
除非您正在散列数十亿条消息或有人篡改传输中的数据,否则碰撞不应该成为问题。如果有人篡改了传输中的数据,则会遇到更大的问题。