【问题标题】:Raw RSA encryption and decryption using Crypto++使用 Crypto++ 的原始 RSA 加密和解密
【发布时间】:2014-11-10 18:53:50
【问题描述】:

我正在使用 Crypto++ wiki 中的 Raw RSA encryption and decryption. 教程和 Raw RSA 开发一个简单的代码,该代码使用 Crypto++ 使用 RSA 加密/解密字符串。

我正在使用 Visual Studio 2010。代码运行没有错误。但是,我不明白 n, e, d 的意义是什么?为什么不能改?

我尊重 RSA 的算法,我选择了这个值:

    // La clé publique est la paire (e, n) et la clé secrète est d, donc aussi p et q.
    // p = 3, q = 11, n = 3 x 11, f = (11–1).(3–1) = 20. On choisit d=7 (7 et 20 sont bien premiers entre eux).
    // e = 3 car e.d= 20 * 1 + 1

但我总是有调试错误:

有人可以帮我吗?

【问题讨论】:

  • stackoverflow.com/a/20114154/179910 涵盖了 RSA 工作原理的一些基本概念以及您需要给它的数字的用途。
  • JacobHacker 的教程只是抄袭 Crypto++ 的作品,没有署名。您可能应该避免使用 JacobHacker 的东西并坚持使用 Crypto++ wiki。
  • “代码运行没有错误......但我总是有调试错误” - 嗯,是什么?如果有错误,请与问题一起发布。
  • 无错误:当我运行发布的代码时出现错误:当我更改 n、e 和 d 的值时
  • 原始或“教科书”RSA 不安全。你应该填充你的明文,除非这是一个练习并且你不担心安全性。

标签: c++ encryption rsa public-key-encryption crypto++


【解决方案1】:
 // p = 3, q = 11, n = 3 x 11, f = (11–1).(3–1) = 20. On choisit d=7
 //    (7 et 20 sont bien premiers entre eux).
 // e = 3 car e.d= 20 * 1 + 1

这些参数被人为地变小了。可能太小了。

RSA 的属性之一是消息大小必须小于模数大小。 3x11 = 33,即 25(给予或接受)。所以你的消息必须小于 5 位。

Crypto++ 以字节而不是位为单位指定消息大小。因此,您可能永远无法加密模数为 33 的任何内容。

不幸的是,引用的 wiki 页面没有讨论 size_in_bits(message) < size_in_bits(modulus)。我目前无法更改它,因为 Crypto++ 无法写入(读取正常)。

另外,这里来自rsa.cpp

if (modulusSize < 16)
  throw InvalidArgument("InvertibleRSAFunction: specified modulus size is too small");

因此,您可能应该指定一个至少为 216 大小的模数。 216 是 65536。

最后,在我们看到您程序的相关部分和错误消息之前,这只是推测。

【讨论】:

  • 谢谢我理解你。你能告诉我如何将 c 转换为 char*: CryptoPP::Integer c = pubKey.ApplyFunction(m);如果我今晚在睡觉前完成我的任务,那就太好了。
猜你喜欢
  • 2017-06-22
  • 2012-04-07
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 2012-02-19
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
相关资源
最近更新 更多