使用随机模块避免重复值

时间:2018-11-30 16:09:43

标签: python python-2.7 random brute-force

下面是一个“蛮力”一词的猜测...我无法向兄弟姐妹证明即使使用蛮力知道字符数也能找到密码。让它运行了两个小时都没有成功之后,我认为他明白了。现在,我想在后面加上一些逻辑,对于我自己的一生,我无法弄清楚。我在网上发现了与我想要的东西相似的东西,但是我不知道如何使其适应我的代码。

import string
import random

def make_random():
   return''.join([random.choice(string.ascii_uppercase) for n in xrange(3)])

while True:
   random2=make_random()
   if random2 != "AAA":
      print(random2)
   if random2 == "AAA":
      print("AAA")
      print("Found")
      break

我认为我需要一个变量来跟踪所有已经猜到的选择,并将其与新字符串进行比较并将其设置为不相等,但老实说我不知道​​。

任何帮助都是很好的帮助。

2 个答案:

答案 0 :(得分:3)

如果有人要系统地尝试所有不同的密码,那么他需要遍历所有可能的组合,而不必两次尝试相同的组合。这是在Python中执行此操作的一种方法:

import itertools
import string

real_pass = 'AAC'


def find_num_iterations_to_guess_password(pass_length):
    all_letters = string.ascii_uppercase
    iterations = 0
    for i in itertools.product(all_letters, repeat=pass_length):
        guess = ''.join(i)
        if guess == real_pass:
            print(f'the real password is {guess} and was guessed after {iterations}')
            break
        iterations += 1


find_num_iterations_to_guess_password(len(real_pass))

答案 1 :(得分:0)

比随机生成猜测并与已使用的选择列表进行比较更好的选择是,通过算法创建所有可能的n长度乘积并对其进行迭代:

from itertools import product
import string

for i in product(string.ascii_uppercase, repeat=3):
    if ''.join(i) == 'AAA':
        print("Found")
        break

编辑:使用product,而不是permutation