我见过 C# 函数
String.GetHashCode();
用于返回字符串的 32 位整数哈希值。
我想生成一个简单的 16 位哈希值。 有人可以帮忙吗?
谢谢
请小心使用
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 位转换为 16 位数字(short
或 ushort
)即可。如果您要在 unchecked
上下文中运行,则需要包含
checked
关键字。
unchecked
{
return (short)someString.GetHashCode();
}