我一直在为学校作业做一个RSA加密/解密任务,我实际上已经完成了整个工作。我想确定我理解的一件事就是填充。这本书指出,在我们将字符串变成一串数字(A = 00,Z = 25)之后,我们需要确定块的大小并在末尾添加虚拟字符。
这本书指出:
接下来,我们将此字符串分成大小相等的2N数字块, 其中2N是最大偶数,使得数字为2525 ... 25 2N位数不超过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(字母)= 26,26-1 = 25),如果它不大于n我们将它增加到2525.如果此时它更大我们停止因为我们知道我们已经走了到目前为止,我们返回长度为2,因为长度4太大了。
这就是我理解它的方式,它有效,但似乎并不正确。我是否正确地解释了这一点,还是我完全脱离了基础?如果我能,有人会让我直截了当? (我不是要求代码,因为这是为了一项任务,我不想让任何人感动,所以如果有人能用简单的英语告诉我我应该做什么,或者用伪代码向我展示那将是伟大的。 )
一如既往地感谢所有人!