【发布时间】:2013-08-28 08:09:45
【问题描述】:
我有一个在 Python 中使用 SHA-1 加密的函数,使用 hashlib。我获取一个文件并使用此哈希加密内容。
如果我为加密的文本文件设置了密码,我可以使用该密码来解密并恢复文件的原始文本吗?
【问题讨论】:
标签: python encryption sha
我有一个在 Python 中使用 SHA-1 加密的函数,使用 hashlib。我获取一个文件并使用此哈希加密内容。
如果我为加密的文本文件设置了密码,我可以使用该密码来解密并恢复文件的原始文本吗?
【问题讨论】:
标签: python encryption sha
SHA-1 不是加密 算法,它是散列 算法。根据定义,你不能“解密”任何用 SHA-1 函数散列的东西,它没有逆函数。
如果您有任意散列密码,则几乎无法检索原始密码 - 如果幸运的话,密码可能在 reverse hashes 的数据库中,但您只能做到这一点。
并且消息提取算法期望原始密码执行验证 - 该算法将对提供的纯文本密码进行哈希处理,并将其与存储的哈希密码进行比较,只有当它们相等时,才会显示纯文本消息.
【讨论】:
散列函数不同于普通的加密算法。它们通常被称为单向密码,因为经过的过程数据是不可逆的。
与对称和非对称加密不同,哈希是通过断言哈希值本身来使用的,而不是解密和断言纯文本值。要在使用哈希时验证登录,您需要对用户刚刚尝试登录的密码进行哈希处理,并将其与数据库中的哈希进行比较。如果匹配,则登录成功。
破解散列涉及猜测散列各种不同的字符串,并尝试将散列值与从数据库中非法获取的值匹配。互联网上有数百万个已经散列值的列表,可以更轻松地进行散列破解,这些列表被称为 Rainbow Tables,可以使用 Salts 轻松应对.
还值得注意的是,由于散列算法能够将 GB 的数据消化成小得多的字符串,因此在数学上,两个不同的值可能具有相同的散列。尽管这种情况非常罕见,但它是一个存在的问题,它被称为 Hash Collision。
如果散列是可逆的,那么硬盘驱动器将是多余的,因为我们可以将数千 GB 的数据散列成一个小文本字符串,并按照我们的意愿将它们反转。它将允许以违反物理学的方式进行数据压缩和存储。
相关的维基百科文章:
哈希算法: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)
【讨论】:
哈希函数是一种方式票。您不能将它们用于加密。
哈希函数算法是通过取模、异或等熟悉的(单向)运算实现的。
您可能会尝试找出用于生成哈希的参数,但理论上您永远无法 100% 确定它是正确的值。
例如,尝试使用一个非常简单(在密码学中无用)的散列函数模 10。该函数返回十个不同的值。如果是 7,您可能会猜到该条目是 7 或 137 和 1234567。与 md5、sha1 和更好的相同。
如您所见,如果您使用的哈希函数仅返回 40 字节,而文件更大(甚至可能是几百兆字节),理论上每个可能的哈希值存在无限数量的文件。
【讨论】: