是python中有md5解密函数吗?

时间:2010-05-03 20:15:29

标签: python md5

  

可能重复:
  Is it possible to decrypt md5 hashes?

我使用md5.new(); md5.update("aaa")md5.digest()

形成数据"aaa"的md5哈希值。如何使用python返回数据?

8 个答案:

答案 0 :(得分:19)

你无法解码md5散列,因为散列是一个最好被认为是one-way encoding的过程(也就是说散列的内容不能被散列;只能通过散列来确定散列的内容检查已知哈希列表,或者通过散列一组输入并将生成的哈希与您尝试“解码”的哈希相匹配)。

引用维基百科,这种哈希算法的主要特征是:

  

找到一条消息是不可行的   有一个给定的哈希,

     是的   在没有的情况下修改消息是不可行的   改变其哈希值,

     

它是不可行的   找到两个不同的消息   相同的哈希。

目前这类算法最常见的用途是:

  • 存储密码
  • 验证文件内容。

如果要对数据进行双向加密,则需要查看其他用于Python的加密库(通常,Stackoverflow有recommendation)。

答案 1 :(得分:14)

你做不到。这就是重点 - 哈希是单向的,它与加密不一样。

答案 2 :(得分:3)

如果要中断哈希,例如密码哈希。然后你需要一个非常大的查找表。 John the Ripper通常用于使用字典来破解密码,如果它是一个盐渍密码哈希,这是一个非常好的方法。

另一个approch正在使用Rainbow Table,但这些需要很长时间才能生成。有free rainbow tables accessible online

Here是一个执行md5()暴力攻击的python脚本。

答案 3 :(得分:2)

我不知道Python - 但哈希函数是不可逆转的。 首先,请注意散列函数提供恒定长度的输出 - 意味着信息将被丢弃(您可以散列3 MB的文件,但仍然只能得到小于1 kB的结果)。 另外,散列函数是因为它们不可逆,所以如果你需要加密,不要使用散列而是加密 - 散列的一个主要应用是当数据库信息泄漏(包含散列)时密码有没有受到损害(有更多的例子,但这是最明显的例子)

答案 4 :(得分:0)

一般来说,BlueRaja和Sean的答案是正确的。 MD5(和其他哈希函数)是单向的,你无法逆转这个过程。

但是,如果您的数据量很小,则可以尝试搜索具有相同哈希值的哈希冲突(另一个或相同的数据)。

答案 5 :(得分:0)

要添加到其他人的观点,MD5是单向哈希。常见用法是散列两个输入值,如果散列值匹配,则输入相同。从MD5哈希值到哈希输入是没有意义的。你可能追求的是symmetric encryption algorithm - 请参阅two-way keyed encryption/hash algorithm,以便就该主题进行良好的讨论。

答案 6 :(得分:0)

哈希将一堆数据映射到一组有限(尽管很大)的数值/字符串。

这是一个多对一的映射,因此解码哈希不仅在加密意义上是“困难的”,而且在概念上也是不可能的,即使你可以,你会得到一组无限的可能输入字符串

答案 7 :(得分:0)

这是一个“解密”MD5哈希的函数。它不是很快。

import hashlib
import sys

def decryptMD5(testHash):
        s = []
        while True:
                m = hashlib.md5()
                for c in s:
                        m.update(chr(c))
                hash = m.hexdigest()
                if hash == testHash:
                        return ''.join([chr(c) for c in s])
                wrapped = True
                for i in range(0, len(s)):
                        s[i] = (s[i] + 1) % 256
                        if s[i] != 0:
                                wrapped = False
                                break
                if wrapped:
                        s.append(0)

print decryptMD5(sys.argv[1])

用法:

$ python md5.py 47bce5c74f589f4867dbd57e9ca9f808
aaa