我一直在为学校作业做 RSA 加密/解密作业,实际上我已经完成了整个工作。我想确保我理解的一件事是填充。书中指出,在我们将字符串转换为数字字符串(A = 00,Z = 25)之后,我们需要确定块的大小并在末尾添加虚拟字符。
书中指出:
接下来,我们将此字符串分成大小相同的 2N 位块,其中 2N 是最大的偶数,这样 2N 位的数字 2525 ... 25 不会超过 n。
它没有告诉我它从哪里得到 25,所以我推断它是我们实际字符键的最后一个字符(在本例中为 Z)的索引。
所以这是我的 Python3 实现(公平警告它有点令人畏惧):
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def __determineSize__(message, n):
if (n < len(alphabet) - 1):
raise Exception("n is not sufficiently large")
buffer = ""
for i in range(0, n, 2):
buffer += str(len(alphabet) - 1) #+= "25" in this case
if (int(buffer) > n):
groupSize = len(buffer) - 2
return groupSize
它从 25 开始( len(alphabet) = 26, 26 - 1 = 25),如果它不大于 n,我们将它增加到 2525。如果它在这一点上更大,我们停止,因为我们知道我们已经走了很远并且我们返回长度 2,因为长度 4 太大。
这就是我的理解,它有效,但似乎不对。我是否正确解释了这一点,还是我完全脱离了基地?如果我是,有人可以让我直截了当吗?(我不是要代码,因为这是一个作业,我不想抄袭任何人,所以如果有人能用简单的英语告诉我我应该做什么或者用伪代码告诉我,那就太好了。 )
像往常一样,提前感谢大家!