我见过 C# 函数String.GetHashCode();
用于返回字符串的 32 位整数哈希。
我想生成一个简单的 16 位字符串值散列。该字符串将始终为 9 个字符长。
有人可以帮忙吗?
谢谢
小心使用GetHashCode()
。此函数仅保证为给定的应用程序域返回相同的哈希值。对于相同的字符串值,它的返回值可以在不同平台和版本之间变化。因此,如果您要存储此哈希值以供以后使用或将其发送出去,您可能会感到惊讶。否则这是一个更快的哈希函数。以下是无需取消选中即可使用它的方法:
public static Int16 Get16BitHash(string s)
{
return (Int16) (s.GetHashCode() & 0xFFFF);
}
如果您对轻微的性能影响没问题,那么您可以使用 MD5 哈希。可以存储或传递此哈希以供以后使用而无需担心。就是这样:
public static Int16 Get16BitHash2(string s)
{
using (var md5Hasher = MD5.Create())
{
var data = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(s));
return BitConverter.ToInt16(data, 0);
}
}
提醒一句:如果你有太多的字符串,因为生日悖论,16 位哈希很可能会发生冲突。如果是 128 位,则通常是安全的哈希大小。
您可以string.GetHashCode
通过将其转换为 16 位数字(short
或ushort
)来简单地获取 16 位。如果您要在上下文中运行,则需要包含unchecked
关键字。checked
unchecked
{
return (short)someString.GetHashCode();
}