我已經看到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