无法终止我的Python代码。出什么问题了?
好的,我正在用Python写一个非常简单的密码破解程序,它通过暴力破解的方式尝试找出密码,这个密码由字母和数字组成。目前这段代码只支持1个字符的密码,并且需要一个包含md5哈希密码的密码文件。将来我会加入一个选项,让用户可以指定字符的限制(也就是破解程序尝试多少个字符后就停止)。现在我遇到的问题是,我无法在想停止这个程序的时候把它杀掉。我已经加了一个try和except的代码片段,但它没有起作用。我哪里做错了呢?
代码: 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
4 个回答
这是对我有效的方法...
import sys
try:
....code that hangs....
except KeyboardInterrupt:
print "interupt"
sys.exit()
要让程序在按下 KeyboardInterrupt
时正常结束,其实就是什么都不做。这个操作依赖于没有任何东西在 except
块中捕获它;当一个异常从程序(或线程)中完全冒出来时,程序就会终止。
你现在做的事情是捕获 KeyboardInterrupt
,然后通过打印一条消息来处理它,之后程序继续运行。
至于为什么程序会卡住,原因是 num1
从来没有改变,所以每次计算 md5 的结果都是一样的。如果你想遍历 alphaNumeric
中的符号,可以这样做:for symbol in alphaNumeric: # 对'symbol'做点什么
。
当然,这样做还是只考虑了每一个可能的一字符密码。你得更加努力才行... :)
我觉得你可能对类的使用有些困惑。Python并不要求你把所有东西都放在一个类里面。你程序最后的 main
其实没有什么用;你的代码之所以能运行,是因为编译器在试图弄明白 main
类是什么时会执行这些代码。这其实是语法的误用。你应该把这段代码放在一个主函数里,然后调用这个函数(就像你现在调用 checker
一样)。
除了打印信息,你在捕捉到 KeyboardInterrupt
时,还需要真正退出你的程序,现在你只是打印了一条消息。