=SHA1HASH('The quick brown fox jumps over the lazy dog')
然后你会得到:
2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
你不能向后退吗?
我的意思是,如果它每次都以相同的方式加密相同的文本,那还有什么意义呢?
如果你知道哈希算法,是否可能向后推导?
请简单地解释一下哈希是如何工作的?如何将20GB转换为40个字符的哈希值?对20GB硬盘进行哈希需要很长时间吗?
=SHA1HASH('The quick brown fox jumps over the lazy dog')
然后你会得到:
2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
你不能向后退吗?
我的意思是,如果它每次都以相同的方式加密相同的文本,那还有什么意义呢?
如果你知道哈希算法,是否可能向后推导?
请简单地解释一下哈希是如何工作的?如何将20GB转换为40个字符的哈希值?对20GB硬盘进行哈希需要很长时间吗?
通用回答
密码哈希函数是不能轻易被反向的。因此有时也称之为单向函数。没有回头路。
你也应该小心地使用“解密”这个词。哈希函数不同于加密。可能的哈希值集合通常比可能的输入集合小,所以多个输入映射到相同的输出。
对于任何哈希函数,给定输出,你无法知道用于生成此特定输出的众多输入中的哪一个。
对于像SHA1这样的密码哈希函数,甚至很难找到一个产生该输出的输入。
反转密码哈希的最简单方法是猜测输入并进行哈希操作,以查看是否产生了正确的输出。如果你猜错了,就再猜一次。另一种方法是使用彩虹表。
关于使用哈希来加密社会安全号码(SSN)
考虑到SSNs的可能输入值数量相对较小,攻击是可能的。如果你担心人们能够获取SSNs,那么最好不要在你的应用程序中存储或使用SSN,尤其不要将它们用作标识符。相反,你可以找到或创建另一个标识符,例如电子邮件地址、登录名、GUID或仅仅是递增的数字。使用SSN可能很诱人,因为它已经存在,并且乍一看似乎是一个唯一且不变的标识符,但实际上使用它只会引起问题。如果你绝对需要存储它,那么请使用强大的非确定性加密与秘密密钥,并确保你保存了该密钥。
由于信息缺失,许多文件将具有相同的哈希值,但是加密哈希(这就是你所谈论的内容)的关键特征是,尽管信息丢失了,但从一个文件开始构造出一个略微不同的第二个文件,其哈希值相同是计算上不可行的。任何具有相同哈希值的其他文件都将大相径庭,并且不容易与原始文件混淆。
SHA1HASH(111-11-1111) -> check hash match
SHA1HASH(111-11-1112) -> check hash match
SHA1HASH(111-11-1113) -> check hash match
他们将不得不运行
SHA1HASH(111-11-1111a) -> check hash match
SHA1HASH(111-11-1111b) -> check hash match
SHA1HASH(111-11-1111c) -> check hash match
...
SHA1HASH(111-11-1111azdfg) -> check hash match
SHA1HASH(111-11-1111azdfh) -> check hash match
....
SHA1HASH(111-11-1111zzzzzzzzzzzzzzzz) -> check hash match
SHA1HASH(111-11-1112a) -> check hash match
SHA1HASH(111-11-1112b) -> check hash match
......直到最终到达目的地
SHA1HASH(123-45-6789MOONBEAM) -> check hash match
最终他们成功破解了SSN和SALT。
他们甚至不知道你的SALT有多少个字符,这意味着为了获取一个SSN,他们需要做10^(你的salt字符数)倍的工作量,更别说获取整个表了。
更新: 许多年后,当我回答这个问题时,我发现自己对盐值加密的信息是错误的。请在下面的帖子和评论中查看正确的信息,关于每个条目使用唯一的盐值,因为这仍然是主题串中的第一个帖子。如果您认为我应该在阅读此内容后更改OP,请在下面留言(或点赞),如果达成共识,我将进行更正。
加密和哈希是两个不同的概念。
哈希只是将字符串转换为数字。加密则保留了字符串的内容,以便以后可以解密。无法从哈希值中获取原始字符串,因为其中的内容已经丢失。
不行。哈希的作用在于它是单向加密(正如其他人所指出的,它并不是真正的“加密”,但请跟我一起理解)。缺点在于,理论上有可能发生“碰撞”,即两个或多个字符串返回相同的哈希值。但通常这个缺点是值得的。
不行,至少不是很容易。
SHA1仍被认为是密码学上安全的。一个哈希算法是安全的,如果它可以容易地进行单向计算,但通过穷举搜索进行另一方向的计算却非常困难。确实,每次加密特定短语时,它将产生相同的哈希值,但有无限数量的短语也会散列到该相同的值。安全性来自于在运行它们全部通过SHA1函数之前,不知道那些其他短语是什么。
加密相同的文本以相同的方式是哈希的全部意义。这是一个特性。
如果我有一个密码哈希数据库,那么我可以通过对其进行哈希并查看哈希是否与我为您保存在数据库中的哈希匹配来检查您输入的正确密码。但是,如果有人窃取了我的哈希数据库,除非他们偶然发现一些明文散列到该值,否则他们将无法找出您的密码。