使用Crypto ++进行原始RSA加密和解密

时间:2014-09-16 21:23:59

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

我使用来自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

但总是我有调试错误: enter image description here enter image description here

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

 // 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,那是2 5 (给予或接受)。所以你的消息必须小于5位。

Crypto ++指定以字节为单位的消息大小,而不是位。所以你可能永远无法加密模数为33的任何东西。

不幸的是,引用的维基页面没有讨论size_in_bits(message) < size_in_bits(modulus)。而且我现在无法改变它,因为Crypto ++因写入而被破坏(读取正常)。

此外,这里来自rsa.cpp

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

所以你应该指定一个模数至少为2 16 的模数。 2 16 是65536。

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