3

有人可以反转我正在使用的这个方便的哈希码吗?

using System.Security.Cryptography;

public static string EncodePasswordToBase64(string password)
{  byte[] bytes   = Encoding.Unicode.GetBytes(password);
   byte[] inArray = HashAlgorithm.Create("SHA1").ComputeHash(bytes);
   return Convert.ToBase64String(inArray);
}

我最终做的一切都失败了:(。

4

4 回答 4

20

不,您不能反转哈希。典型的过程是将其他输入与您拥有的散列进行比较,以检查它们是否相同。

喜欢(伪):

initial  = Hash(password);
possible = Hash("test");

if( initial == possible ){
    // we infer that password = "test"
}

但请注意,不应再使用 SHA1、SHA0 和 MD5;(由于不同程度的断裂)。你应该使用 SHA-2

于 2009-09-30T23:41:02.940 回答
5

“unhashing”的唯一真正方法是使用彩虹表,这是一个为所有可能的输入计算的散列的大表。您查找哈希并获得可能是原始输入的内容。

http://en.wikipedia.org/wiki/Rainbow_table

于 2009-09-30T23:44:13.993 回答
0

不幸的是,您不能取消散列 SHA1、MD5 或任何其他单向散列方法。虽然可以撤消 BASE-64。

于 2009-09-30T23:48:03.503 回答
0

SHA 是“安全哈希算法”的 NSA 首字母缩写词。

从定义上讲,安全哈希很难逆转——否则它们就不是安全的。

如果您希望能够轻松计算将生成相同哈希的源,则需要使用可逆哈希函数(即使这样,由于哈希冲突,您可能无法获得原始源,其中多个源输入可能导致相同的哈希输出)。

于 2009-10-01T05:25:01.527 回答