首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何模拟MD5哈希冲突

如何模拟MD5哈希冲突
EN

Stack Overflow用户
提问于 2016-10-26 04:58:54
回答 2查看 1.9K关注 0票数 0

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

我正在使用Python库来生成hashlib散列。

现在,我希望MD5函数总是返回特定的数字,尽管输入不同。我该怎么做?有配置文件吗?

EN

回答 2

Stack Overflow用户

发布于 2016-10-26 05:37:44

免责声明

正如评论中提到的,这很可能是糟糕的想法,也很可能是X/Y问题

为了清晰起见,这就是我所说的可以通过猴子补丁来完成的事情:

代码语言:javascript
复制
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)。

票数 4
EN

Stack Overflow用户

发布于 2016-10-26 05:09:48

除非您编写自己的函数或实现猴子修补程序,否则tl;博士是不能的。

散列不是为多个完全不同的数据段返回相同的值而设计的(尽管由于哈希的长度,不可避免地会发生冲突,和MD5一样 )。您可以编写自己的函数来检查传递的值,并在需要时让它返回唯一的值。举个例子:

代码语言:javascript
复制
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传递给该函数,则将返回相同的哈希,否则它将返回另一个哈希。

此外,没有“配置文件”。它只是在C程序中编写的一个特定的算法。如果你绝望了,你可能会改变它,但它只会在你的系统上工作。

您也可以实现所谓的猴子补丁。我对这个领域不了解,但是你可以从这是如此的帖子上找到更多的信息。

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40254051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档