C# 任何32位或64位哈希函数?

C# 任何32位或64位哈希函数?,c#,c#-4.0,C#,C# 4.0,我想用c#创建一个方法,它将返回最多10-12个字符的字符串。我曾尝试使用SHA1和MD5,但它们分别为160位和128位,生成的字符串为32个字符,无法满足我的要求。安全不是问题。我只需要一个保持唯一的小字符串您可以将字符串(散列)截断为所需的长度。您只会使它变得更弱(作为一个极端的例子,如果您将它截断为一个字节,那么在对16个元素进行散列处理后,可能会发生冲突,这要归功于。好散列的每一部分都和其他部分一样“好”。因此,以前x个字符/字节为例,快乐地生活。例如,请参见中关于此的讨论。有一个关于

我想用c#创建一个方法,它将返回最多10-12个字符的字符串。我曾尝试使用SHA1和MD5,但它们分别为160位和128位,生成的字符串为32个字符,无法满足我的要求。安全不是问题。我只需要一个保持唯一的小字符串

您可以将字符串(散列)截断为所需的长度。您只会使它变得更弱(作为一个极端的例子,如果您将它截断为一个字节,那么在对16个元素进行散列处理后,可能会发生冲突,这要归功于。好散列的每一部分都和其他部分一样“好”。因此,以前x个字符/字节为例,快乐地生活。例如,请参见中关于此的讨论。有一个关于被截断的散列的安全性的解释。

您可以将字符串(散列)截断到您想要的长度。您只会使它变得更弱(作为一个极端的例子,如果您将它截断为一个字节,那么在对16个元素进行散列处理后,可能会发生冲突,这要归功于。好散列的每一部分都和其他部分一样“好”。因此,以前x个字符/字节为例,快乐地生活。例如,请参见中关于此的讨论。有一个关于被截断的哈希的安全性的解释。

还包含关于输出长度的信息。显然,对于所有可能的10-12个字符的字符串,您不能有唯一的32位或64位哈希代码。如果您不存储哈希代码,您可以使用
string.GetHashCode()
。。。(如果您正在存储它,这是不好的,因为
string.GetHashCode()
的实现可能会为同一程序的不同运行返回不同的结果。)感谢您的回复。如果我将32个字符的十六进制字符串截断为10-12个字符,请告诉我一件事。碰撞的可能性有多大?我尝试了500个不同的输入,结果字符串每次都是唯一的。我必须生成近5000个stringserm,2^32可能还包含有关输出长度的信息。显然,对于所有可能的10-12个字符的字符串,不能有唯一的32或64位哈希代码。如果不存储哈希代码,可以使用
string.GetHashCode()
。。。(如果您正在存储它,这是不好的,因为
string.GetHashCode()
的实现可能会为同一程序的不同运行返回不同的结果。)感谢您的回复。如果我将32个字符的十六进制字符串截断为10-12个字符,请告诉我一件事。碰撞的可能性有多大?我尝试了500个不同的输入,结果字符串每次都是唯一的。我必须生成大约5000个stringserm,大概2^32个感谢您的回复。如果我将32个字符的十六进制字符串截断为10-12个字符,请告诉我一件事。碰撞的可能性有多大?我尝试了500个不同的输入,结果字符串每次都是唯一的。我必须产生将近5000个strings@ask它取决于散列的位数:-)如果它是6位/字符(base64),10个字符是60位,那么使用平方根近似,sqrt(2^60)=1073741824。。。有10亿个元素,你有50%的几率发生碰撞。谢谢你的回复。如果我将32个字符的十六进制字符串截断为10-12个字符,请告诉我一件事。碰撞的可能性有多大?我尝试了500个不同的输入,结果字符串每次都是唯一的。我必须产生将近5000个strings@ask它取决于散列的位数:-)如果它是6位/字符(base64),10个字符是60位,那么使用平方根近似,sqrt(2^60)=1073741824。。。有10亿个元素,你有50%的几率发生碰撞。