RSA公钥将ASCII值加密为0,如何解密?

时间:2011-11-14 18:53:13

标签: encryption rsa

我决定学习RSA加密,因为在comp sci讲座中了解了春天的密码。 我掌握了RSA背后的想法(它非常聪明),但是在尝试编写我自己的C程序来加密和解密一串字符时,我遇到了一些问题。

我使用公钥加密每个字符的ASCII值,然后解密密文。但是,我发现有时我创建的公钥会将ASCII值加密为0,然后无法将其解密为0 ^ anything = 0。 我当然肯定是错的,因为二进制文件可以使用RSA加密/解密。

E.g。

  • p = 3
  • q = 5
  • N = 15(p * q)
  • m =(p-1)(q-1)= 8
  • e = 7(互质到m)
  • d = 7(7d(mod8)= 1 ...在人们开始之前,我只使用7,因为这个示例很方便(不是安全加密)

现在取char“T”(ASCII值84)

运行加密,密文为= 0

0 ^ 7(mod 8)= 0 ...不是84!

请有人指出我正确的方向。

提前致谢

1 个答案:

答案 0 :(得分:4)

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作为用于演示目的的合理值,但需要注意的是并非所有消息值都能正常工作。