如何使用 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);
}
我最终所做的一切都失败了:(。
Can someone reverse this handy hash code I'm using?
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);
}
Everything I end up doing fails horribly :(.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
不,你不能反转哈希值。典型的过程是将其他输入与您拥有的哈希进行比较,以检查它们是否相同。
Like(伪):
但注意不要再使用SHA1、SHA0、MD5; (由于每个方面都有不同程度的破坏)。您应该使用 SHA-2
No, you can't reverse a hash. The typical process is to compare other input to the hash you have, to check if they are the same.
Like (pseudo):
But note that SHA1, SHA0, and MD5 should no longer be used; (due to various degrees of breaking in each). You should use SHA-2
“反哈希”的唯一真正方法是使用彩虹表,它是为所有可能的输入计算的哈希值的大表。您查找哈希并得到可能原始输入。
http://en.wikipedia.org/wiki/Rainbow_table
The only real way of "unhashing" is using a rainbow table, which is a big table of hashes computed for all possible inputs. You look up the hash and get what was probably the original input.
http://en.wikipedia.org/wiki/Rainbow_table
遗憾的是,您无法取消 SHA1、MD5 或任何其他单向哈希方法的哈希值。尽管可以撤销 BASE-64。
You cannot un-hash SHA1, MD5, or any other one-way hash method unfortunately. Though it is possible to undo BASE-64.
SHA 是 NSA 的“安全哈希算法”的缩写。
根据定义,安全哈希很难逆转——否则它们就不是安全的。
如果您希望能够轻松计算生成相同哈希值的源,则需要使用可逆哈希函数(即使如此,由于哈希冲突,您可能无法获得原始源,其中多个源输入可能会导致相同的哈希值)哈希输出)。
SHA is an NSA acronym for "Secure Hash Algorithm".
Secure Hashes are hard to reverse by definition -- otherwise they would not be Secure.
You need to use a reversible hash function if you want to be able to easily compute sources that will generate the same hash (and even then you might not get the original source due to hash collisions where more than one source input can result in the same hash output).