从生成的hashcode()获取数据

时间:2010-12-11 09:19:25

标签: c#

我有一个字符串(名称str),我从中生成哈希码(名称H), 我想从收到的哈希码(名称H)

接收原始字符串(名称str)

4 个答案:

答案 0 :(得分:6)

简短的回答是你不能。

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

答案 1 :(得分:2)

您可以尝试通过Brute Force AttackRainbow tables

的帮助来完成此操作

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

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

答案 2 :(得分:2)

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

数学上不可能。只有2 ^ 32个不同的int s,但几乎无限多的字符串,所以从pigeon hole principle开始,你无法恢复字符串。

你可以很容易地找到与HashCode匹配的一个字符串,但它可能不是最初散列的字符串。

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

答案 3 :(得分:1)

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