C# 取消哈希值的哈希值#

C# 取消哈希值的哈希值#,c#,winforms,hash,C#,Winforms,Hash,有人能把我用的散列码倒过来吗 using System.Security.Cryptography; public static string EncodePasswordToBase64(string password) { byte[] bytes = Encoding.Unicode.GetBytes(password); byte[] inArray = HashAlgorithm.Create("SHA1").ComputeHash(bytes); return 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);
}

我最后做的每件事都失败得很惨:(.

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

类似(伪):

但是请注意,不应再使用SHA1、SHA0和MD5(因为它们各自有不同程度的中断)。您应该使用SHA-2,唯一真正的“取消哈希”方法是使用彩虹表,这是一个为所有可能的输入计算的哈希表。您可以查找哈希并获得可能是原始输入的内容


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

SHA是NSA“安全哈希算法”的缩写

根据定义,安全散列很难反转——否则它们就不安全了


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

Silky一针见血,哈希是单向的,只能通过蛮力选项反转。哈希不一定是单向的。例如哈希(1)=1在Python中,这当然是可逆的。如果输出字符串的大小小于输入字符串的大小,则散列只是单向的。Falaina:当然,但有两件事:“散列”的定义是它将输入减少到更小的值()而加密散列(上下文;根据这个问题)在设计上是不可逆的()散列不是加密,它是散列。加密使用密钥并且是可逆的……这就是为什么在存储散列之前对敏感数据进行盐处理很重要。
initial  = Hash(password);
possible = Hash("test");

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