我使用来自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
但总是我有调试错误:
有人可以帮助我吗?
答案 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。
最后,在我们看到程序的相关部分和错误消息之前,这只是推测。