Python 3.2 中的蛮力脚本

2022-01-22 00:00:00 python python-3.x brute-force passwords

问题描述

我是编写代码的初学者,我从 Python 开始,因为它似乎是最简洁和最容易开始的(我目前有 Python 3.2).现在我已经阅读了一些关于 python 编码的在线书籍等,我已经制作了一些小程序,仅此而已.

I'm a beginner in writing code and I've started with Python because it seemed the neatest and the easiest to start with (I currently have Python 3.2). Now I've read some online books and so on about coding in python, I've made some small programs and that's it.

但后来我想制作一个可以暴力破解随机密码的程序,例如:

But then I wanted to make a program that could brute-force a random password like:

PassWord = random.randint(0,9999)

我做了一些可以尝试随机密码的东西:

I made something that could try random passwords:

import random
PassWord = str(random.randint(0,9999))
Trial = ' '
while Trial != PassWord:
    Trial = str(random.randint(0,9999))
    print(Trial)
    if Trial == PassWord:
        print('The password is: '+PassWord)
        input()

但这并不是真正的暴力攻击,它更多的是尝试随机猜测密码.我认为蛮力攻击是首先用 1 位数字尝试所有可能性,然后是 2、3 等等.但我不知道如何做到这一点.

But that's not really a brute-force attack, it's more trying to randomly guess a password. I think a Brute-Force attack is first tries all possibility's with 1 digit then 2, 3 and so on. But I have no clue and knowledge how to do this.

如果有人能说出如何创建一个程序,该程序首先检查 1 位数字的所有可能性,如果可能,以正确的顺序(0、1、2、3 等),然后是 2、3 和4 位数.

I would really appreciate if someone would say how to create a program that first checks all possibilities with 1 digit and if possible, in the right order (0,1,2,3 and so on), then 2,3 and 4 digits.

然后我可以解决它,并了解有关 Python 的更多信息.

Then I could work around on it, and learn more about Python.


解决方案

代码优先:

from itertools import product

chars = '0123456789' # chars to look for

for length in range(1, 3): # only do lengths of 1 + 2
    to_attempt = product(chars, repeat=length)
    for attempt in to_attempt:
        print(''.join(attempt))

itertools.product 生成其输入的笛卡尔连接 - 在这种情况下,它被连接"到自身.所以在第一次迭代中,每一个字符都会被打印出来.然后在下一次迭代中,因为repeat=length(而length现在==2),生成了'00'、'01'等……值得尝试并查看输出以更好地理解它.

itertools.product produces a Cartesian join of its input(s) - in this case, it's being 'joined' to itself. So in the first iteration, each single character is printed. Then in the next iteration, because of repeat=length (and length is now == 2), generates '00', '01', etc... It's worth trying it and seeing the output to understand it better.

这也意味着您可以输入字母(大写/小写),并在 range 函数中更改上限.

This also means you can throw in letters (uppercase/lowercase), and change the upperbound in the range function.

它肯定不会打破代码破解的世界,但应该让您了解 Python 的灵活性和可用的工具.

It's certainly not going to break the world of code-breaking, but should give you an idea of the flexibility of Python and the tools available to you.

我会让你检查密码是否匹配并打破循环.

I'll leave you to check the passwords match and break out the loop.

相关文章