Python - 从包含4-5个字母和5-6个数字的给定字符创建wordlist

时间:2015-10-11 20:14:26

标签: python python-3.x itertools dictionary-attack

我正在寻求进行字典攻击并且想要知道如何创建一个单词列表,其中包含字母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)

由于

3 个答案:

答案 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']