c# - 哈希字符串以进行重复检测

标签 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 术语),然后分别检查它们,但这需要与数据库中的记录进行比较,而且成本不可能发生。

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

最佳答案

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

如果您想要一个 .NET 提供的快速且不提供加密安全性的解决方案,MD5 就可以满足您的需求。

如果您需要确定一条消息是否与另一条消息不同,并且您预计有人会篡改传输中的数据并且可能会使用位旋转技术对其进行修改以强制发生哈希冲突,您应该使用 SHA-256 或SHA-512。

冲突不应该成为问题,除非您正在散列数十亿条消息或有人正在篡改传输中的数据。如果有人篡改传输中的数据,您的问题就更大了。

关于c# - 哈希字符串以进行重复检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21412481/

相关文章:

java - Java 中分段 S3 上传的 eTag 算法?

c# - 检查 Key 是否存在于 NameValueCollection 中

c# - 安装 facebook c# sdk

c# - ExecuteStoreQuery 未返回输出参数

c# - 从 EDMX 中分离实体类 (DTO) 的实用方法

c# - 您如何确定 C# Visual Studio 项目生成的可执行文件和 DLL?

php - PHP 中的 password_hash() 将算法设置为 '1'

python - 在twisted的Perspective Broker中使用替代身份验证

java - 该方法如何计算 Rational(1).hashCode()? 1 的分子或分母是 1 本身

asp.net - 我应该将(带盐的密码)存储在数据库中,还是将哈希密码和盐作为数据库中的两个不同字段存储?