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"
}