好吧,自从我上次使用 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
有人有什么建议吗?