如何模拟MD5哈希冲突

时间:2016-10-26 04:58:54

标签: python md5 hashlib

我正在使用私有Ubuntu服务器并正在测试私有应用程序

我正在使用Python hashlib库来生成MD5哈希值。

现在我希望MD5功能总是返回我的特定数字,尽管输入不同。我怎样才能做到这一点?有配置文件吗?

2 个答案:

答案 0 :(得分:3)

<强>声明

正如评论中所提到的,这很可能是可怕的想法,很可能是X / Y problem

为了清楚起见,这就是我所说的,当我说它可以通过猴子补丁完成时:

import hashlib

class DummyMD5():

    def __init__(self, realmd5):
        self.md5 = realmd5
        self.v = None

    def hexdigest(self):
        return "12345abcdef"

    def __call__(self, v):
        self.v = v
        return self

    def __getattr__(self, f):
        if f not in self.__dict__:
            return self.md5(self.v).__getattribute__(f)




_md5 = hashlib.md5
hashlib.md5 = DummyMD5(_md5)

只要在其他地方使用hashlib调用之前导入/执行此操作,它将使用常量值替换hexdigest的结果。任何其他方法都会返回真正的md5(如digest)。

答案 1 :(得分:-1)

<强> TL;博士 你不能,除非你自己编写函数或实现猴子补丁。

哈希不是为多个完全不同的数据片段返回相同的值(尽管由于哈希的长度,不可避免地存在冲突like with MD5)。您可以编写自己的函数来检查传递的值,并在需要时返回一个唯一值。一个例子:

import hashlib

def my_func(thing):
    hash_for_cheese = 'fea0f1f6fede90bd0a925b4194deac11'
    if thing == "cheese":
        return hash_for_cheese
    elif thing == "football":
        return hash_for_cheese
    else:
        return hashlib.md5(thing).hexdigest()

在这种情况下,如果您将cheesefootball传递给函数,则会返回相同的哈希值,否则会返回另一个哈希值。

此外,没有&#39;配置文件&#39;。它只是一个用C程序编写的特定算法。如果您绝望,可能能够更改它,但它只适用于您的系统。

你也可以实现所谓的猴子补丁。我在该领域并不了解,但您可以从this SO post了解更多信息。

正如其他人所指出的那样,我不能想到这类问题的用例,尽管如果你需要这样做,那么你就得到了答案。