我正在使用一个私有Ubuntu服务器并测试一个私有应用程序。
我正在使用Python库来生成hashlib散列。
现在,我希望MD5函数总是返回特定的数字,尽管输入不同。我该怎么做?有配置文件吗?
发布于 2016-10-26 05:37:44
免责声明
正如评论中提到的,这很可能是糟糕的想法,也很可能是X/Y问题。
为了清晰起见,这就是我所说的可以通过猴子补丁来完成的事情:
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)。
发布于 2016-10-26 05:09:48
除非您编写自己的函数或实现猴子修补程序,否则tl;博士是不能的。
散列不是为多个完全不同的数据段返回相同的值而设计的(尽管由于哈希的长度,不可避免地会发生冲突,和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()在本例中,如果将cheese或football传递给该函数,则将返回相同的哈希,否则它将返回另一个哈希。
此外,没有“配置文件”。它只是在C程序中编写的一个特定的算法。如果你绝望了,你可能会改变它,但它只会在你的系统上工作。
您也可以实现所谓的猴子补丁。我对这个领域不了解,但是你可以从这是如此的帖子上找到更多的信息。
正如其他人所指出的,我想不出这类问题的用例,尽管如果您需要这样做,那么您就有了答案。
https://stackoverflow.com/questions/40254051
复制相似问题