2010-10-31 63 views
2

从从MSDN http://msdn.microsoft.com/en-us/library/system.string.gethashcode.aspx从String.GetHashCode解密哈希字符串?

为 “ABC” 的哈希代码此示例代码:536991770

但如何转换回 “536991770” 到 “ABC”?

+6

你猜。很多。 – 2010-10-31 08:40:15

+0

有可能得到**一个字符串**,它有这个散列码,但它可能不会是**你散列的字符串**。 – CodesInChaos 2010-10-31 09:24:21

+0

你有没有想过,只有4,294,967,296不同的哈希码,但无限多的字符串? – Timwi 2010-10-31 11:23:50

回答

14

没有办法从散列码中获取值。见hash-function的定义。 散列值不用于唯一标识原始值,对于每种类型的输入值,值都是而不是

散列函数可以将两个或更多个 键映射到相同的散列值。在许多应用中,希望最小化这种冲突的发生,这意味着函数必须尽可能均匀地将密钥映射到散列值 。

8

你不行。哈希是一种方法。

与哈希值的事情是,你松散的信息。独立于字符串的长度,结果总是一个整数。这意味着例如获取具有10,000个字符的字符串也将导致整数。当然不可能从这个整数中得到原始字符串。

2

没有办法“解密”散列码。除其他原因之外,因为两个不同的字符串可能会产生相同的哈希码。单靠这一特征就无法扭转这一过程。

1

你不能,
即使你将不得不与世界上所有的字符串及其哈希码表你就无法做到这一点,因为有更多的字符串,然后整数(约4个十亿整数),这样就是几个导致相同散列码的字符串。