Python:将特殊字符转换为可操作的整数?

时间:2016-04-16 12:39:35

标签: python encryption special-characters

我目前正在开发一个非常简单的加密项目算法,以显示对加密工作方式的基本了解,我的加密算法基本上只使用'ord()'函数将标准ASCII字符转换为算法可以处理的整数。

我遇到的问题是我还需要我的程序能够加密,例如,Windows可执行文件(EXE)文件的内容。为此,我需要将各种特殊字符(非ASCII)转换为我可以操作的整数。

我不太了解编码,但根据我的理解,'ord()'只能起作用,因为有一个ASCII字符映射,每个字符都有一个相应的编号。我似乎无法想象如何将EXE文件的特殊字符直接转换为整数,所以我尝试转换为字节,这对我来说似乎更普遍(如果我错了请纠正我)。

此时,我只是在寻找能够读取EXE文件的解决方案,并将每个字符转换为特定于该字符的数字(用于加密/解密)。

1 个答案:

答案 0 :(得分:3)

您将分配给字节(如ASCII标准)的含义与字节本身混淆。 ord()只给出给定字节的数值。 Python解释这些字节并显示ASCII码点既不在这里也不在那里。

换句话说,ord()不需要查询ASCII表,并且可以处理任何字节值。它所要做的就是获取已知的字节值,并为它提供一个Python int对象。

将您的数据读取为二进制文件(打开文件,并将b添加到文件模式),然后使用ord()。在Python 2中,这将导致str个对象,并且此类对象中的每个字符实际上都是0到255范围内的字节值。

请注意,如果您使用的是Python 3,则以二进制模式从文件读取会导致bytes对象更清楚地表明这些是一个范围内的整数值:

>>> b'abc'
b'abc'
>>> b'abc'[0]
97

索引到bytes对象中的单个点会产生整数值,并且不需要调用ord()