如何打印密码组合(但每个索引有自定义约束)

4 投票
1 回答
517 浏览
提问于 2025-04-16 18:56

我正在尝试制作一个动态的密码恢复工具。你可以输入一个密码和一个未知字符列表,这些未知字符对应于你记不住的密码位置。也就是说,如果你记得90%的密码,但有几个字母忘了,这个工具可以帮你轻松地进行暴力破解。

我已经能把用户提供的密码和未知字符列表结合起来了;不过,我现在卡在了如何打印出所有可能的密码组合。

我现在遇到的问题是:

password = 'Dude123'
charList = ['d8','vV','','D8','','','']
finalString = [''.join(set((a, b))) for a, b in zip(password, charList)] 

print(finalString) #This statement yields the following
['Dd8', 'uv^', 'd', 'eD8', '1', '2', '3']

现在我需要打印出:

Dude123
dude123
8ude123
Dvde123
dvde123
8vde123

或者类似的结果(不需要按特定顺序遍历字符,我只需要一个所有可能组合的列表)。

谢谢你的帮助!

戴夫

1 个回答

3

你是指像这样的吗?

>>> import itertools
>>> 
>>> password = 'Dude123' 
>>> charList = ['d8','vV','','D8','','',''] 
>>> 
>>> finalString = [''.join(set((a, b))) for a, b in zip(password, charList)] 
>>> 
>>> possibles = list(''.join(poss) for poss in itertools.product(*finalString))
>>> possibles
['Dude123', 'DudD123', 'Dud8123', 'Dvde123', 'DvdD123', 'Dvd8123', 'DVde123', 'DVdD123', 'DVd8123', 'dude123', 'dudD123', 'dud8123', 'dvde123', 'dvdD123', 'dvd8123', 'dVde123', 'dVdD123', 'dVd8123', '8ude123', '8udD123', '8ud8123', '8vde123', '8vdD123', '8vd8123', '8Vde123', '8VdD123', '8Vd8123']

撰写回答