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

在python中以蛮力方式生成密钥,python,for-loop,cryptography,brute-force,Python,For Loop,Cryptography,Brute Force,我试图在Python上以已知的key\u长度生成所有可能的键。 键定义为0到255之间的整数列表。 我无法生成所有可能的密钥 如果key\u length是一个常数,比如2,我就知道如何处理这个问题了——你知道,循环只有2个。然而,当它在一个变量中时,我不知道我需要写多少for循环。我想我需要一种不同的方法。这正是让我感到困难的原因。您可以使用: 使用numpy的索引,您可以以最快的速度完成此操作 import numpy as np max_dim = 3 comb=np.indices(tu

我试图在Python上以已知的
key\u长度
生成所有可能的键。 键定义为0到255之间的整数列表。 我无法生成所有可能的密钥

如果
key\u length
是一个常数,比如2,我就知道如何处理这个问题了——你知道,循环只有2个。然而,当它在一个变量中时,我不知道我需要写多少for循环。我想我需要一种不同的方法。这正是让我感到困难的原因。

您可以使用:


使用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   
从复制导入deepcopy
x=[[i,]表示范围内的i(256)]
最大尺寸=4
梳=x
尺寸=1
当尺寸<最大尺寸时:
新梳=[]
对于梳中的c:
对于x中的i:
a=深度复制(c)
a、 追加(i[0])
新梳追加(a)
梳子=新梳子
dim+=1
打印梳
x是一个包含所有1位数字组合的列表


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

你能添加你的双for循环方法吗?这样你就知道如果你已经有了所有的N-1长度的键,如何生成所有的N长度键了?当然。这将是这样的:
key=[0代表范围内的i(key\u length);对于范围内的i(255):对于范围内的j(255):key[0]=i;key[1]=j;尝试(密文,key)
[抱歉,我是sof新手]@glosta不确定我是否理解;
key\u length
可以是任何整数(但复杂性会阻止您选择比2大得多的…)因为他不知道数字,所以你需要循环键的长度dimensions@Glostas这个问题提到了一个“在一个已知的键长上”,没有
itertools.product
这确实很难做到。我想这就是问题的所在。哦,好吧……我的理解不同。我认为键长的数量是可变的。在重读这个问题,我倾向于站在你这边
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