我有一个使用hashlib
在Python中使用SHA-1进行加密的功能。我拿一个文件并用这个哈希加密内容。
如果我为加密文本文件设置了密码,我可以使用此密码解密并使用原始文本恢复文件吗?
答案 0 :(得分:8)
SHA-1
不是加密算法,它是哈希算法。根据定义,你不能“解密”任何用SHA-1函数散列的东西,它没有反转。
如果你有一个任意的哈希密码,你可以做很少的事情来检索原始密码 - 如果你很幸运,密码可以在reverse hashes的数据库中,但这就是你可以做到的去。
并且消息提取算法期望原始密码执行验证 - 算法将散列提供的纯文本密码并将其与存储的散列密码进行比较,只有当它们相等时才会显示纯文本消息
答案 1 :(得分:6)
散列函数与普通的加密算法不同。它们通常被称为单向密码,因为过程数据通过是不可逆转的。
与对称和不对称加密不同,哈希通过声明散列值本身而不是解密和断言纯文本值来使用。要在使用哈希值时验证登录,您需要对用户刚刚尝试登录的密码进行哈希处理,并将其与数据库中的哈希值进行比较。如果匹配,则登录成功。
破解哈希涉及猜测散列各种不同的字符串并尝试将散列值与从数据库中非法获取的散列值进行匹配。互联网上有可用数百万个散列值的列表,可以更容易地进行散列破解,这些被称为 Rainbow Tables ,可以通过 Salts 轻松应对它们
值得注意的是,由于散列算法能够将GB的数据消化为明显更小的字符串,因此在数学上,两个不同的值可能具有相同的散列值。尽管这种情况非常罕见,但这是一个存在的问题,它被称为 Hash Collision 。
如果散列是可逆的,你可以想象一下吗?硬盘驱动器将是可还原的,因为我们可以将数千GB的数据散列到一小段文本中,并按照我们的意愿反转它们。它将是数据压缩和存储的 nirvana 。
相关维基百科文章:
哈希算法:http://en.wikipedia.org/wiki/Hash_function
彩虹表:http://en.wikipedia.org/wiki/Rainbow_table
盐:http://en.wikipedia.org/wiki/Salt_(cryptography)
碰撞:http://en.wikipedia.org/wiki/Collision_(computer_science)
答案 2 :(得分:1)
哈希函数是单向票。您不能将它们用于加密。
散列函数算法通过modulo,xor和其他熟悉的(单向)操作实现。
您可能会尝试找出用于生成哈希的参数,但从理论上讲,您永远不会100%确定它是正确的值。
例如尝试使用非常简单(在密码学中无用)散列函数模10。此函数返回十个不同的值。如果是7,你可能会猜到条目是7或137和1234567.与md5,sha1和更好的条目相同。
正如您所看到的,在您使用的哈希函数只返回40个字节且文件更大(甚至几百兆字节)的情况下,理论上每个可能的哈希都会存在无限数量的文件。