【问题标题】:Decrypt SHA1 with (password) in python在python中使用(密码)解密SHA1
【发布时间】:2013-08-28 08:09:45
【问题描述】:

我有一个在 Python 中使用 SHA-1 加密的函数,使用 hashlib。我获取一个文件并使用此哈希加密内容。

如果我为加密的文本文件设置了密码,我可以使用该密码来解密并恢复文件的原始文本吗?

【问题讨论】:

    标签: python encryption sha


    【解决方案1】:

    SHA-1 不是加密 算法,它是散列 算法。根据定义,你不能“解密”任何用 SHA-1 函数散列的东西,它没有逆函数。

    如果您有任意散列密码,则几乎无法检索原始密码 - 如果幸运的话,密码可能在 reverse hashes 的数据库中,但您只能做到这一点。

    并且消息提取算法期望原始密码执行验证 - 该算法将对提供的纯文本密码进行哈希处理,并将其与存储的哈希密码进行比较,只有当它们相等时,才会显示纯文本消息.

    【讨论】:

    • 我想快速补充一点,这就是发明 SHA-1 和类似哈希算法的原因。你永远不希望它们被颠倒。
    【解决方案2】:

    散列函数不同于普通的加密算法。它们通常被称为单向密码,因为经过的过程数据是不可逆的。

    与对称和非对称加密不同,哈希是通过断言哈希值本身来使用的,而不是解密和断言纯文本值。要在使用哈希时验证登录,您需要对用户刚刚尝试登录的密码进行哈希处理,并将其与数据库中的哈希进行比较。如果匹配,则登录成功。

    破解散列涉及猜测散列各种不同的字符串,并尝试将散列值与从数据库中非法获取的值匹配。互联网上有数百万个已经散列值的列表,可以更轻松地进行散列破解,这些列表被称为 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)

    对称加密:http://en.wikipedia.org/wiki/Symmetric-key_algorithm

    非对称加密:http://en.wikipedia.org/wiki/Public-key_cryptography

    【讨论】:

      【解决方案3】:

      哈希函数是一种方式票。您不能将它们用于加密。

      哈希函数算法是通过取模、异或等熟悉的(单向)运算实现的。

      您可能会尝试找出用于生成哈希的参数,但理论上您永远无法 100% 确定它是正确的值。

      例如,尝试使用一个非常简单(在密码学中无用)的散列函数模 10。该函数返回十个不同的值。如果是 7,您可能会猜到该条目是 7 或 137 和 1234567。与 md5、sha1 和更好的相同。

      如您所见,如果您使用的哈希函数仅返回 40 字节,而文件更大(甚至可能是几百兆字节),理论上每个可能的哈希值存在无限数量的文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-03
        • 2022-11-16
        • 2011-04-30
        • 1970-01-01
        • 1970-01-01
        • 2012-06-26
        • 1970-01-01
        相关资源
        最近更新 更多