我从pycrypto示例中得到了以下信息:
>>> from Crypto.Cipher import AES
>>> obj = AES.new('This is a key456', AES.MODE_ECB)
>>> message = "The answer is no"
>>> ciphertext = obj.encrypt(message)
>>> ciphertext
'o\x1aq_{P+\xd0\x07\xce\x89\xd1=M\x989'
>>> obj2 = AES.new('This is a key456', AES.MODE_ECB)
>>> obj2.decrypt(ciphertext)
'The answer is no'
现在我创建一个脚本:
#!/usr/bin/env python
from Crypto.Cipher import AES
obj = AES.new('This is a key456', AES.MODE_ECB)
message = "The answer is no"
ciphertext = obj.encrypt(message)
ciphertext
#'o\x1aq_{P+\xd0\x07\xce\x89\xd1=M\x989'
obj2 = AES.new('This is a key456', AES.MODE_ECB)
obj2.decrypt(ciphertext)
当我运行脚本时。我希望看到字符串输出
'o\x1aq_{P+\xd0\x07\xce\x89\xd1=M\x989'
'The answer is no'
但我没有得到任何东西。我试过了print ciphertext
,但它打印了垃圾。
请帮忙。
答案 0 :(得分:3)
您必须在要打印的内容上调用print
函数(或py2中的print
语句):
#!/usr/bin/env python
from Crypto.Cipher import AES
obj = AES.new('This is a key456', AES.MODE_ECB)
message = "The answer is no"
ciphertext = obj.encrypt(message)
print(ciphertext)
#'o\x1aq_{P+\xd0\x07\xce\x89\xd1=M\x989'
obj2 = AES.new('This is a key456', AES.MODE_ECB)
print(obj2.decrypt(ciphertext))
答案 1 :(得分:3)
您正在以非交互模式运行脚本。也就是说,你看到的例子是有人在终端上运行Python或类似的东西。
变量仅在单独调用时以交互模式打印出来。
答案 2 :(得分:1)
在脚本中,只是调用变量并不像在交互式shell中那样打印它。尝试将obj2.decrypt(ciphertext)
保存为变量并致电print
,或者只在print
之前致电obj2.decrypt(ciphertext)
。
#!/usr/bin/env python
from Crypto.Cipher import AES
obj = AES.new('This is a key456', AES.MODE_ECB)
message = "The answer is no"
ciphertext = obj.encrypt(message)
ciphertext
#'o\x1aq_{P+\xd0\x07\xce\x89\xd1=M\x989'
obj2 = AES.new('This is a key456', AES.MODE_ECB)
x = obj2.decrypt(ciphertext)
print(x)
#or, just print obj2.decrypt(ciphertext)
答案 3 :(得分:1)
将变量单独放在一行上并不会将其打印出来。您需要使用print语句(或函数,如果在python 3中)来执行此操作。
您需要了解REPL是什么,以及它与脚本的区别。
在REPL中,键入一行,对其进行求值,然后打印生成的对象。在python的情况下,如果结果对象计算为None
,则生成的对象不打印,这就是为什么示例中只有两行产生任何输出。
所以,在你的脚本中,而不是:
obj2.decrypt(ciphertext)
执行:
print obj2.decrypt(ciphertext)
或者,如果您想获得与REPL完全相同的输出,请执行以下操作:
print repr(obj2.decrypt(ciphertext))
但这不太可能是你想要的。