【发布时间】:2018-10-26 19:25:42
【问题描述】:
我有一个字符串数据字段,它是 12 个字符,字母数字(字母和数字)。出于安全原因,我需要在此字段上执行单向哈希。我应该使用什么算法来避免冲突(不同的值散列到相同的值)以获得准确的报告?这样可以吗?
Edit: Here is the code based on suggestions in comments so far:
public static string GetHashedValue(string Input)
{
byte[] bytes = System.Text.Encoding.Unicode.GetBytes(Input);
bytes = new System.Security.Cryptography.SHA512Managed().ComputeHash(bytes);
String output = Convert.ToBase64String(bytes);
return output;
}
【问题讨论】:
-
是的,
SHA256Managed就够了,你也可以使用SHA512Managed。 -
满足什么?只有你能告诉我们,这让这个问题在这里我很害怕。
-
足以避免碰撞,正如我所说的@DavidG
-
可能你应该将这些字节转换为 base64 字符串,而不仅仅是 ASCII。编码会导致数据丢失,因此可能的冲突机会会很高。
-
如果不是 ASCII @CetinBasoz,什么 System.Text.Encoding 值适合避免这种情况?还有其他的,比如 UTF8、UTF16 等……不过,我的源数据都是字母数字的。以下是可能的编码: ASCII UTF-16 UTF-32 UTF-7 UTF-8