Unhashing哈希C#

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

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); } 

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

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

喜欢(伪):

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

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

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

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

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

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

根据定义,安全散列难以反转 – 否则它们将不安全。

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