我已经看到C#函数String.GetHashCode();
用于返回字符串的32位整数哈希值。在C#中获取16位字符串的哈希值
我想生成一个简单的16位字符串值散列。该字符串将始终为9个字符。
任何人都可以协助吗?
感谢
我已经看到C#函数String.GetHashCode();
用于返回字符串的32位整数哈希值。在C#中获取16位字符串的哈希值
我想生成一个简单的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位。
您可以简单地通过它强制转换为16位数字(short
或ushort
)采取从string.GetHashCode
16位。如果您要在checked
上下文中运行,则需要包含unchecked
关键字。
unchecked
{
return (short)someString.GetHashCode();
}
感谢您的支持 - MD5版本正是我需要的:) – tip2tail