2017-07-27 73 views
1

我有一個加密的卷,我幾乎可以但不完全記住密碼。使用Python查找LUKS密碼

有10個字符,我不確定:有些是封套,有些字母與數字,可能完全省略。

我可以讓python列出所有可能的密碼列表,但我怎麼能測試它們以確定正確答案,而不是按照列表中的方式輸入它們呢?

的是我有這麼遠,讓我們說的密碼是「the_pass」

passparts = [["t", "T"], ["h"], ["e", "3"], ["_", ""], ["p"], ["a", "4"], ["s"], ["s"]] 
possibilities = itertools.product(*passparts) 
for x in possibilities: 
    possible = "".join(x) 
    print possible 

一些打法是有可能有蟒蛇測試「可能」每次看它是否能解密

例音量?

我的現實世界問題也有2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 3 = 1536個可能性,我認爲python可以快速測試每一個,這不會是一個問題?

回答

0

也許我在解釋問題方面做得不好,但我解決了這個問題,並在此發佈答案,以防其他人發生這種情況。

因此,我發現您可以使用pexpect輕鬆啓動終端進程並與其進行交互,您需要下載pexpect。無論如何,這個工作對我來說:

passparts = [["t", "T"], ["h"], ["e", "3"], ["_", ""], ["p"], ["a", "4"], ["s"], ["s"]] 
possibilities = itertools.product(*passparts) 
for x in possibilities: 
    possible = "".join(x) 
    print possible 
    child = pexpect.spawn('udisksctl unlock -b /dev/sdc2') 
    child.logfile = open("/tmp/mylog", "w") 
    child.expect(".*") 
    child.sendline(possible) 
    child.expect(".*") 
    print(child.before) 
    child.expect(pexpect.EOF, timeout=None) 
    print child.before 
    print child.after 

不是一個非常快速的方法,但它發現我正確的密碼,在不到10分鐘。