Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么PyDES输出不能在不更改的情况下打印?_Python_Python 2.7_Encryption_Des - Fatal编程技术网

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

Python 为什么PyDES输出不能在不更改的情况下打印?,python,python-2.7,encryption,des,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 ciphertex

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

    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。

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

>>> print var
您得到的是对象变量的_str__方法的输出。 相反,当您以另一种方式打印变量时:

>>>> var
您得到的是对象变量的_repr___)方法的输出

这两种方法之间的区别在于_repr_uu函数的返回值应该是有效的python表达式。理想情况下,您应该能够通过简单地复制/粘贴其_repr_______________________________________。但是_repr__方法的输出仅用于调试目的。 相反,_ustr_uu方法的目的是返回一个可读且简洁的对象表示


在您的例子中,当您编写>>>密文时,您得到的是一种形式表示,它将任何不可打印的字符转换为十六进制表示形式。相反,当您使用print语句时,您将获得包含不可打印字符的原始数据。

\uuuuuurepr\uuuu!=__str_u________________________________________________。您的解释说明了为什么会发生这种情况,但我的主要问题是,如何避免将加密字的难以辨认版本写入txt文件,以便在以后访问时正确解密。因此,在这种情况下,我如何将报告写入txt文件而不是str?您为什么需要这种输出?也许有更好的方法来实现你的目标。我正在制作我的第一个python程序,它是一个密码管理器。为此,我制作了一个txt文件,其中所有密码都以加密方式存储,我需要将加密密码写入其中。然而,当这些密码被写入txt时,它们的长度会发生变化,这意味着它们并不总是8字节的倍数,因此解密不能总是对它们进行解密。这就是为什么我需要它们以一致的格式写入txt,这样当我在上面运行decrypt时,它总是可以工作的。如果你能想出任何其他方法来存储加密的通行证,我也会很感激。存储密码的正确方法就是你已经在使用的方法。有些字符串可能看起来更短,但这仅仅是因为其中一些字符没有可视表示,但它们仍然存在。不,当解密在单个单词上运行时,有时它会说输入不是8字节的倍数,而其他时候它可以工作。而且,当密码在中间被写入一个新的行字符时,它会变成一个噩梦,因为我的程序假设密码被存储为ActudioNeXEngPASS。此外,出于某种原因,它有时会假定某一行是txt文件的最后一行,因此即使反向读取,也会使它从中间的某一行开始读取。以这种方式工作将是非常令人沮丧的。