自从在计算机科学讲座中学习了春季密码以来,我决定学习 RSA 加密。我掌握了 RSA 背后的想法(它非常聪明),但是在尝试编写自己的 C 程序来加密和解密字符串时,我遇到了一些问题。
我使用公钥加密每个字符的 ASCII 值,然后解密密文。然而,我发现有时我创建的公钥会将 ASCII 值加密为 0,然后就无法将其解密为 0^anything = 0。我肯定是错的,因为可以使用以下方法加密/解密二进制文件RSA。
例如
现在取字符“T”(ASCII 值 84)
运行加密,密文=0
0^7 (mod 8) = 0 ...不是 84!
有人可以指出我正确的方向吗?
提前致谢
RSA 加密仅限于加密 1 到 (p*q)-1 范围内的正数,这些正数不是 p 或 q 的倍数。在实际应用中,p*q通常会比要加密的最大消息大得多,并且消息将用随机位填充以填充1到(p*q)-1的范围。虽然从理论上讲,为消息选择的随机填充可能会导致其成为 p 或 q 的倍数,但实际上,唯一可能发生的情况是随机数生成器出现严重错误。
然而,在“玩具应用程序”中,有问题的值代表了可能消息空间的更大部分。即使您选择的 p 和 q 足够大,使得 p*q 大于您的消息(例如 13 和 17),仍然有许多可能的消息值会失败(例如 65 或 85)。我建议将 13 和 17 作为用于演示目的的合理值,但需要注意的是,并非所有消息值都适用。