我希望能够将任何字符串表示为一个唯一的整数(意味着世界上的每个整数只能表示一个字符串,并且某个字符串将不断地产生同一个整数)。
显而易见的一点是,这就是计算机的工作方式,将字符串
'Hello'
(例如)表示为每个字符的数字,特别是一个字节(假设 ASCII
编码)。
但是...我想对该数字执行算术计算(使用
RSA
将其编码为数字)。
这变得混乱的原因是因为假设我有一个更大的字符串
'I am an average length string'
我有更多的字符(在本例中为29),并且具有29个字节的整数可能会很大,可能太多了计算机无法处理(当想出更大的弦时......?)。
基本上,我的问题是,我该怎么办?我不想使用任何模块来实现
RSA
,这是我想自己实现的任务。
以下是如何将字符串转换为单个数字。正如您所怀疑的,这个数字会变得非常大,但 Python 可以处理任意大小的整数。使用加密的通常方法是一次处理各个字节,但我假设这只是为了学习经验。这里假设一个字节字符串,如果你有一个 Unicode 字符串,你可以先编码为 UTF-8。
num = 0
for ch in my_string:
num = num << 8 + ord(ch)
我觉得上面的代码不太好用,每次输出都只有0,这个代码肯定能用。
num = 0
for ch in my_string:
if "0" <= ch <= "9":
num = num * 10 +(ord(ch) - ord("0"))