大量存储

时间:2014-05-23 13:14:03

标签: c++ math rsa

我正在尝试为学校项目实施RSA Key Generation algorithm。我在算法的加密阶段遇到了麻烦。它要求我将用户输入的整数提高到随机数的幂(随机数有一个标准),这些随机数通常是2或3位长;例如。 23^239 = d。在大多数情况下,'d'值是100位数字长,我找不到任何东西来存储它。我尝试了long long,但返回值始终为负数。

如何生成和存储非常大的数字?

1 个答案:

答案 0 :(得分:4)

RSA中的所有取幂均为模幂运算。也就是说,您永远不会只计算23^239 ...相反,您将计算类似23^239 mod 11的内容。你可以计算取幂,然后计算模数....但正如你所见,这需要能够代表一个相当大的数字。相反,人们同时做两个操作;这样效率更高,并且不需要太多存储空间。

有关详细信息和算法,请参阅https://en.wikipedia.org/wiki/Modular_exponentiation

(请注意,通常情况下,仍然需要一个用于RSA的bigint库,因为你将使用数百位长的数字,而不是2或3位数。这里的分配似乎但是,这样做是为了让你不必这样做。)