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

Encryption RSA公钥将ASCII值加密为0,如何解密?,encryption,rsa,Encryption,Rsa,自从在一次comp sci讲座中学习了vernal密码之后,我决定学习RSA加密。 我掌握了RSA背后的思想(它非常聪明),然而,当我试图编写自己的C程序来加密和解密字符串时,我遇到了一些问题 我使用公钥加密每个字符的ASCII值,然后解密密文。但是,我发现有时我创建的公钥会将ASCII值加密为0,然后无法将其解密为0^anything=0。 我肯定错了,因为二进制文件可以使用RSA加密/解密 例如 p=3 q=5 N=15(p*q) m=(p-1)(q-1)=8 e=7(互质到m) d=7(

自从在一次comp sci讲座中学习了vernal密码之后,我决定学习RSA加密。 我掌握了RSA背后的思想(它非常聪明),然而,当我试图编写自己的C程序来加密和解密字符串时,我遇到了一些问题

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

例如

  • p=3
  • q=5
  • N=15(p*q)
  • m=(p-1)(q-1)=8
  • e=7(互质到m)
  • d=7(7d(mod8)=1…在人们开始尝试之前,我只使用7,因为它对于这个示例很方便(不适用于安全加密)
现在取字符“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作为合理的值用于演示目的,但要注意的是,并非所有消息值都有效。

最明显的问题是,您直接使用RSA加密字符串。您应该为对称密码加密密钥,并使用对称密码加密消息。您还应该使用correct填充。此外,您只能将RSA应用于整数0