在python中以强力方式生成密钥

时间:2018-03-14 10:41:17

标签: python for-loop cryptography brute-force

我正在尝试在Python上的已知key_length上生成所有可能的键。 键定义为0到255之间的整数列表。 我无法生成所有可能的密钥...

如果key_length是一个常数,例如2,我就知道如何处理这个 - 它只是2个for循环,你知道。但是,当它在变量中时,我不知道需要写多少个for循环。我想我需要一种不同的方法。这对我来说很难。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

您可以使用itertools.product

from itertools import product

key_length = 2
for items in product(range(256), repeat=key_length):
    print(items)

# (0, 0)
# (0, 1)
# ...
# (255, 254)
# (255, 255)

答案 1 :(得分:0)

你可以用numpy的索引来最快地完成这项工作

import numpy as np
max_dim = 3
comb=np.indices(tuple([256 for i in range(max_dim)])).T.reshape(-1,max_dim)
print comb

你想自己做,这会更复杂

from copy import deepcopy
x = [[i,] for i in range(256)]
max_dim = 4

comb = x
dim = 1

while dim < max_dim:
    new_comb = []
    for c in comb:
        for i in x:
            a = deepcopy(c)
            a.append(i[0])
            new_comb.append(a)
    comb = new_comb
    dim += 1
print comb   

x是包含1位数

的所有组合的列表

虽然维度低于您给出的最大数量,但我将所有可能的数字添加到之前的所有组合中。请注意,由于python列表的可变性,您必须复制以前找到的组合。