python - 对哈希 (MD5) 电子邮件地址进行取消哈希处理

标签 python hash md5

我知道,根据定义,对你进行哈希处理会丢失信息。然而,由于电子邮件地址可能受到限制 - 例如根据可用的信息,我会知道电子邮件的潜在域,并且它必须有一个@。这些限制会改变问题吗?或者是简单地猜测并查看哈希值是否相同的最佳方法?而且 MD5 不再像以前那样安全。

谢谢

最佳答案

这就是 Md5 哈希的要点,即使字符串中的微小变化也可以完全改变哈希。所以这些约束对问题没有任何改变。

但是,既然您说这是一封电子邮件并且您知道潜在的域,那么您可以尝试此技术。

  1. 生成潜在电子邮件列表,长度不超过 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/

相关文章:

Ruby - 获取哈希值

java - 无法创建 MD5 哈希文件?

hash - 非基于十六进制的哈希码

python - celery celerybeat 可以在运行时动态添加/删除任务吗?

python - 用于计算邮件日志文件 python 中的电子邮件地址的字典

python - 分析和改进 Django 的 ORM (SORT) 生成的查询的性能

encryption - 使用 RSA 进行哈希

python-3.x - 是否有覆盖 __hash__ 的用例?

java - 将MD5数组转换为String java

python - 使用 sep ='\t' 在 Pandas 中读取 CSV 文件无法正常工作