不能杀死我的python代码。发生了什么?

2024-06-17 13:20:05 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,所以我用python编写了一个非常简单的密码破解程序,它可以强制使用字母数字字符的密码。目前这段代码只支持1个字符的密码和一个包含md5哈希密码的密码文件。它最终将包括一个选项来指定你自己的字符限制(破解程序尝试多少个字符直到失败)。现在我不能在我想让它死的时候杀死它。我已经包括了一个尝试,除了snippit,但它不起作用。我做错什么了?在

代码:http://pastebin.com/MkJGmmDU

import linecache, hashlib

alphaNumeric = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",1,2,3,4,5,6,7,8,9,0]

class main:
    def checker():
            try:
                    while 1:
                            if hashlib.md5(alphaNumeric[num1]) == passwordHash:
                                    print "Success! Your password is: " + str(alphaNumeric[num1])
                                    break
            except keyboardInterrupt:
                    print "Keyboard Interrupt."

    global num1, passwordHash, fileToCrack, numOfChars
    print "What file do you want to crack?"
    fileToCrack = raw_input("> ")
    print "How many characters do you want to try?"
    numOfChars = raw_input("> ")
    print "Scanning file..."
    passwordHash = linecache.getline(fileToCrack, 1)[0:32]
    num1 = 0

    checker()

main

Tags: 代码程序密码mainchecker字符md5hashlib
3条回答

除了打印,当capturinKeyboardInterrupt时,您需要实际退出程序,您只打印一条消息。在

这对我很有效。。。在

import sys

try:
    ....code that hangs....

except KeyboardInterrupt:
    print "interupt" 
    sys.exit()  

允许KeyboardInterrupt结束程序的方法是不做任何事。它们的工作原理是不依赖于在except块中捕获它们;当异常从程序(或线程)中冒出时,它就会终止。在

您所做的是捕获KeyboardInterrupt并通过打印消息然后继续处理它们。在

至于程序为什么会卡住,没有任何东西会导致num1发生变化,所以md5计算每次都是相同的计算。如果您想迭代alphaNumeric中的符号,那么就这样做:for symbol in alphaNumeric: # do something with 'symbol'。在

当然,这仍然只考虑每个可能的一个字符的密码。你要比那更努力。。。:)

我想你也对类的使用感到困惑。Python并不要求您将所有内容包装在类中。程序末尾的main没有任何用处;代码的运行是因为当编译器试图找出main类是什么时,会对其进行求值。这是滥用语法。您要做的是将这段代码放入main函数,然后调用函数(与当前调用checker的方式相同)。在

相关问题 更多 >