如何使用Python生成非随机词典密码?

时间:2019-01-19 12:58:39

标签: python

与女友分手后,我将我的密码更改为:

“ MyEx-GirlFriendIsAnInsult”(是的,很幼稚)

我使用了大写,小写,数字和特殊字符,但我不记得现在放的位置。

我想构建一个脚本,以生成“ MyEx-GirlFriendIsAnInsult”的所有可能组合。

例如,“ E”可以是“ E”,“ e”,“ 3”,“ i”可以是“ i”,“ 1”,“!”等等。

在这种情况下,是否存在可以帮助我的python库?

我该如何进行?我完全迷失了方向,不知道从哪里开始(Python初学者,这将是我的第一个研究案例之一。)

谢谢!

2 个答案:

答案 0 :(得分:3)

首先建立一个包含所有可能字符替换的列表。为了简明扼要,我简化了您的示例,您当然希望在代码中构建它,而不是将列表指定为文字:

mylist = ["Mm", "yY", "Gg", "I1i" , "rR", "Ll", "Fr", "Ii1", "Ee3", "nN", "dD"]

一旦拥有所有选项,请使用itertools获取所有这些选项的乘积:

import itertools
for f in itertools.product(*mylist): 
    print (''.join(f))

这给出了:

MyGIrLFRIEnd
MyGIrLFRIEnD
... 13,820 more ..
mYgiRlfr13Nd
mYgiRlfr13ND

答案 1 :(得分:1)

您可以定义字典,将键定义为大写字符,将值定义为该字符的所有可能组合。

rand_dict = {
    "A": ["@", "a", "A"],
    "B": ["b", "3", "B"],
    "C": ["c", "(", "C"],
    "D": ["D", "d", "6"],
    "E": ["E", "e"],
    "F": ["F", "f"],
    "G": ["6", "G", "g", "9"],
    "H": ["h", "H"],
    "I": ["I", "i", "!"],
    "J": ["J", "j"],
    "K": ["k", "K"],
    "L": ["l", "L", "1"],
    "M": ["m", "M"],
    "N": ["n", "N"],
    "O": ["O", "o", "0"],
    "P": ["p", "P"],
    "Q": ["Q", "q"],
    "R": ["R", "r"],
    "S": ["s", "S", "$"],
    "T": ["T", "t"],
    "U": ["U", "u"],
    "V": ["v", "V", "<"],
    "W": ["w", "W"],
    "X": ["x", "X"],
    "Y": ["Y", "y"],
    "Z": ["z", "Z"],
}

通过循环字符串来随机播放所有可能的列表

foo = "MyExGirlFriendIsAnInsult"

bar = []
for i in list(foo.upper()):
    random.shuffle(rand_dict[i], random.random)
    bar.append(rand_dict[i][0])

print("".join(bar))

输出如下:

Myex9Ir1fR!EnD!s@NInsulT
myEXGiRLfRIeNdI$AnIN$uLT
MYEX6Irlfrien6!$aNInsUlt
MYEXG!R1fr!ENdISAn!nSu1t
myExg!rLFrIEn6is@NiN$u1T