1

好吧,自从我上次使用 Python 以来已经有一段时间了,所以我的知识有点生疏。我对 getpass 模块和 raw_input() 以及一般的 python 字符串有疑问。

我正在使用 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

有人有什么建议吗?

4

1 回答 1

0

啊发现问题...我是个白痴。我输入的密码错误。

即使重复打印密码,也设法错过了它。

于 2013-03-10T14:53:42.793 回答