我知道,根据定义,对你进行哈希处理会丢失信息。然而,由于电子邮件地址可能受到限制 - 例如根据可用的信息,我会知道电子邮件的潜在域,并且它必须有一个@。这些限制会改变问题吗?或者是简单地猜测并查看哈希值是否相同的最佳方法?而且 MD5 不再像以前那样安全。
谢谢
最佳答案
这就是 Md5 哈希的要点,即使字符串中的微小变化也可以完全改变哈希。所以这些约束对问题没有任何改变。
但是,既然您说这是一封电子邮件并且您知道潜在的域,那么您可以尝试此技术。
- 生成潜在电子邮件列表,长度不超过 26 个字母,最大长度为 10 个。
然后您可以为所有这些可能性生成一个 md5,并检查它是否等于您拥有的 md5。
import hashlib
from itertools import combinations
import time
start=time.time()
your_md5_hash='your_md5_hash'
letters='abcdefghijklmnopqrstuvwxyz'
possible_words=[]
for r in range(1,10): #change 10 to the maximum size of your email
for combo in combinations(list(letters), r=r):
res=''.join(combo)
possible_words.append(res)
possible_words=[''.join(x)+'@domain.com' for x in possible_words]
print (len(possible_words))
for x in possible_words:
res=hashlib.md5(x.encode())
if res==your_md5_hash:
print (res)
print (x)
print ("RESULT_FOUND")
exit(0)
print (time.time()-start)
这是一种暴力方法,如果您知道电子邮件的大小,那么这可能会起作用。其次请注意,如果您不知道大小,那么可能性的大小将呈指数级增加。
例如,目前组合的长度为 5658536,我的基本笔记本电脑需要 6 秒才能处理。
关于python - 对哈希 (MD5) 电子邮件地址进行取消哈希处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71128835/