【问题标题】:RSA public key encrypts ASCII value to 0, how to decrypt?RSA公钥将ASCII值加密为0,如何解密?
【发布时间】:2011-12-28 22:06:42
【问题描述】:

自从在 comp sci 讲座中学习了春季密码后,我就决定学习 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 加密字符串。您应该加密对称密码的密钥并使用该对称密码来加密消息。您还应该使用正确的填充。
  • 您也只能将 RSA 应用于整数 0

标签: encryption rsa


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    相关资源
    最近更新 更多