我正在使用私有Ubuntu服务器并正在测试私有应用程序
我正在使用Python hashlib
库来生成MD5哈希值。
现在我希望MD5功能总是返回我的特定数字,尽管输入不同。我怎样才能做到这一点?有配置文件吗?
答案 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()
在这种情况下,如果您将cheese
或football
传递给函数,则会返回相同的哈希值,否则会返回另一个哈希值。
此外,没有&#39;配置文件&#39;。它只是一个用C程序编写的特定算法。如果您绝望,可能能够更改它,但它只适用于您的系统。
你也可以实现所谓的猴子补丁。我在该领域并不了解,但您可以从this SO post了解更多信息。
正如其他人所指出的那样,我不能想到这类问题的用例,尽管如果你需要这样做,那么你就得到了答案。