我目前正在开发一个非常简单的加密项目算法,以显示对加密工作方式的基本了解,我的加密算法基本上只使用'ord()'函数将标准ASCII字符转换为算法可以处理的整数。
我遇到的问题是我还需要我的程序能够加密,例如,Windows可执行文件(EXE)文件的内容。为此,我需要将各种特殊字符(非ASCII)转换为我可以操作的整数。
我不太了解编码,但根据我的理解,'ord()'只能起作用,因为有一个ASCII字符映射,每个字符都有一个相应的编号。我似乎无法想象如何将EXE文件的特殊字符直接转换为整数,所以我尝试转换为字节,这对我来说似乎更普遍(如果我错了请纠正我)。
此时,我只是在寻找能够读取EXE文件的解决方案,并将每个字符转换为特定于该字符的数字(用于加密/解密)。
答案 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()
。