2013-03-10 71 views
1

好吧,自從我上次使用Python以來,我一直在等一會兒,所以我的知識有點生疏。一般來說,我有一個關於getpass模塊和raw_input()和python字符串的問題。str和getpass輸出之間的區別

我正在使用pycrypto模塊。有一個使用SHA256散列的密碼字符串,其中的 摘要隨後用於解密AES密碼。

下面的代碼工作:

password = "applesandpairsstairs" 
print len(password) 
print type(password) 
plaintext = AESDecrypt(ciphertext, password, iv) 
print "Plaintext: %s\n" % plaintext 

我得到的輸出:

20 
<type 'str'> 
Plaintext: This is some test data for use. 

顯然,這是一個有點傻了其在程序中的密碼,所以首先我打開它出去的raw_input()。

password = raw_input("Enter Password: ") 
print len(password) 
print type(password) 
plaintext = AESDecrypt(ciphertext, password, iv) 
print "Plaintext: %s\n" % plaintext 

當這種打印它:

20 
<type 'str'> 
Plaintext: (Load of ciphertext characters) 

所以這顯然是行不通的。注意:我也嘗試過的STR()輪的raw_input

最後我的代碼:

password = getpass.getpass("Enter Password: ",sys.stderr) 
print len(password) 
print type(password) 

它打印一樣的一個的raw_input。

AESDecrypt是,僅僅調用哈希和解密並返回明文的方法:

hash = SHA256.new() 
hash.update(password) 
key = hash.digest() 
obj = AES.new(key, AES.MODE_CBC, iv) 
plaintext = obj.decrypt(ciphertext) 
return plaintext 

任何人有什麼建議嗎?

+1

比較字符串的'repr()';匹配長度並不意味着匹配的內容。 'raw_input()'給你正常的字符串,正如你已經發現的那樣,這裏有其他的錯誤。 – 2013-03-10 14:18:25

+0

當你說pycrypto時,你的意思是[this](https://pypi.python.org/pypi/pycrypto)包嗎?如果是這樣,什麼是AESDecrypt? – unutbu 2013-03-10 14:32:28

+0

@unutbu查看已編輯的問題,瞭解AESDecrypt的功能。 – IainS 2013-03-10 14:48:02

回答

0

啊發現問題...我是個白癡。我輸錯了密碼。

即使重複打印密碼,仍然可能會丟失它。

相關問題