C# 从生成的hashcode()获取数据

C# 从生成的hashcode()获取数据,c#,C#,我有一个字符串(名为str)并由此生成hashcode(名为H), 我想要从接收的hashcode(name H)中接收原始字符串(name str)简单的回答是您不能 创建哈希代码是单向操作-没有反向操作。原因是(出于所有实际目的)有无限多的字符串,但只有有限多的哈希代码(可能的哈希代码的数量受int的范围限制)。每个哈希代码都可能是从给出该哈希代码的无限多个字符串中的任意一个生成的,并且无法知道是哪个字符串。您可以尝试通过或在 无论如何,(即使您成功地找到了一些东西),使用这些方法,您只会发

我有一个字符串(名为str)并由此生成hashcode(名为H),
我想要从接收的hashcode(name H)中接收原始字符串(name str)

简单的回答是您不能


创建哈希代码是单向操作-没有反向操作。原因是(出于所有实际目的)有无限多的字符串,但只有有限多的哈希代码(可能的哈希代码的数量受
int
的范围限制)。每个哈希代码都可能是从给出该哈希代码的无限多个字符串中的任意一个生成的,并且无法知道是哪个字符串。

您可以尝试通过或在

无论如何,(即使您成功地找到了一些东西),使用这些方法,您只会发现一个字符串具有与原始字符串相同的hascode,但您绝对不能确定该字符串是否为原始字符串,因为hascodes不是唯一的


嗯,也许
绝对
甚至有点限制,因为概率说你99.9999999999…%找不到相同的字符串:D

哈希正在从通常较大的输入生成一个短的固定大小值。它通常是不可逆的

数学上不可能。只有2^32个不同的
int
s,但是几乎有无限多个字符串,因此从下面的例子中,您无法恢复该字符串

您可以很容易地找到与哈希代码匹配的字符串,但它可能不是最初进行哈希处理的字符串


GetHashCode()
是为在哈希表中使用而设计的,因此这只是一个性能技巧。它允许将输入值快速排序到存储桶中,仅此而已。它的价值是由实现定义的。因此,另一个.net版本,甚至同一应用程序的另一个实例可能会返回不同的值<代码>返回0
GetHashCode
的一个有效(但不推荐)实现,并且不会产生任何关于原始字符串的信息。

我们中的许多人都希望能够做到这一点:=)

请提供更多信息,但我认为您正在尝试使用单向散列,就像双向散列一样,这是不可能的。