为什么PyDES输出不能在不改变的情况下打印?

时间:2014-01-01 17:19:30

标签: python python-2.7 encryption des

我有一个非常简单的问题。这个空闲的示例代码最好地解释了这一点:

    from pyDes import *
>>> ciphertext = triple_des('a 16 or 24 byte password').encrypt("secret message", padmode=2)
>>> ciphertext
')\xd8\xbfFn#EY\xcbiH\xfa\x18\xb4\xf7\xa2'
>>> print ciphertext
)Ø¿Fn#EYËiHú´÷¢

如果有人可以解释为什么会发生这种情况以及如何在将此代码写入txt文件(不更改解密输出)时阻止它发生,我将不胜感激,因为write()函数具有相同的效果文本。顺便说一句,我在vista上使用python 2.7。

1 个答案:

答案 0 :(得分:0)

当你在Python shell中并以这种方式打印一些变量时:

>>> print var

您得到的是对象__str__的{​​{1}}方法的输出。 相反,当你以另一种方式“打印”变量时:

var

您得到的是对象>>>> var 的{​​{1}}方法的输出。

这两种方法的区别在于__repr__函数的返回值应该是有效的python表达式。理想情况下,您应该能够通过简单地复制/粘贴其var方法的输出来获得与__repr__相同的新对象(在每种情况下都不可能这样做)。但是,var方法的输出仅用于调试目的。 相反,__repr__方法旨在为您返回一个人类可读且简洁的对象表示。

在你的情况下,你写__repr__时得到的是“正式”表示,它以十六进制表示形式翻译任何不可打印的字符。相反,当您使用__str__语句时,您将获得包含不可打印字符的“原始”数据。