我正在寻求进行字典攻击并且想要知道如何创建一个单词列表,其中包含字母af和2-9的每10个字母排列(我可以做)每个单词包含5个字母(af)只有5个数字(2-9)或6个字母(af)和4个数字(2-9)(我不能做)。
这是我到目前为止(来自here):
import itertools
chrs = 'abcdef23456789'
n = 2
min_length, max_length = 10, 10
for n in range(min_length, max_length+1):
for xs in itertools.product(chrs, repeat=n):
print ''.join(xs)
由于
答案 0 :(得分:0)
只需编写一个函数,该函数返回字符串中有效字母和数字的数量,并测试返回值。
nums = '23456789'
chars = 'abcdef'
def letter_number_count(word):
l,n = 0,0
if len(word) == 10:
for c in word:
if c in nums:
n += 1
elif c in chars:
l += 1
return l,n
测试输出
>>> s = 'abcdef2345'
>>> (l,n) = letter_number_count(s)
>>> if (l,n) == (6,4) or (l,n) == (5,5):
... print "Do something"
...
Do something
>>>
答案 1 :(得分:0)
您可以单独检查每个排列,如果满足条件,则将其添加到数组中。 只需编写一个简单的布尔函数来计算每个函数中的数字和字母,并检查条件。
答案 2 :(得分:0)
这将从总数n打印出20个这样的排列!其中n = 10(10!= 3,628,800)
import itertools as it
print(list(map(''.join,it.islice(it.permutations('abcdef23456'), 20))))
['abcdef2345', 'abcdef2346', 'abcdef2354', 'abcdef2356', 'abcdef2364', 'abcdef2365', 'abcdef2435', 'abcdef2436', 'abcdef2453', 'abcdef2456', 'abcdef2463', 'abcdef2465', 'abcdef2534', 'abcdef2536', 'abcdef2543', 'abcdef2546', 'abcdef2563', 'abcdef2564', 'abcdef2634', 'abcdef2635']