C++个大数字

C++ big numbers

本文关键字:数字 C++      更新时间:2023-10-16

我正在尝试为一个项目实现 RSA,但我被困在需要大于 19 位数字的数字的阶段(我认为长长有 19 位数字(。我试过给无符号的长长,但我仍然没有 1 位数字,而且值不正确。我什至无法检查我的加密/解密是否有效。

我已经尝试了一些库,但我无法对这种类型和 int 进行交叉操作......有什么帮助吗?

这是我所拥有的:

void En() {
crypted= text;
unsigned long long temp=0;
unsigned long long enc = 0;
for (int i = 0; i < text.length() / 2; i++)
{
if (text[i]>='a' && text[i] <= 'z')
{
temp = (text[i] - 96) * 26 + text[i + 1] - 96;
enc = pow(temp, public_key);
enc= enc % N
cout << enc << endl;
enc_v2 = enc;
}
}
cout << "Enc: " << enc << endl;}
void De() {
unsigned long long c = 0;
unsigned long long temp2 = 0;
unsigned long long temp = 0;
char ch=' ', ch2=' ';
for (int i = 0; i < text.length()/2; i++)
{
cout << enc_v2 << private_key;
temp = pow(enc_v2, private_key);
cout << "Temp :" << temp;
temp = temp % N;
cout << "Temp modulo :" << temp;
temp2 = temp;
temp = temp / 26;
cout << " Temp char 1 :"<< temp;
ch = temp + 96;

temp2 = temp2 - temp * 26;
cout << " Temp char 1 :" << temp2;
ch2 = temp2 + 96;

}
cout << "Text: " << ch << ch2;}

谢谢!

为了表示大于任何基元类型的整数,可以使用整数数组,其中数组的每个数字表示较大数字的不同字节。这称为任意精度算术。对于这种"大"数字类型,必须单独实现每个算术运算以及输入和输出。

对于较大的数字,您需要在单个函数中进行模幂运算。这意味着您在进行计算执行模量。当然,之后的操作可以完成,但是:

  1. 它占用更多的位和
  2. 它的效率不高。

作为一个(低效的(例子,您可以将幂视为执行基数乘法,然后取模并重复该过程,直到您执行了e乘法(当然,从 1 值而不是基数开始(。

在大多数(加密(库中,您都有某种提供modPow方法的bignum库。请注意,拥有此类功能本身不足以创建安全的 RSA 操作;通常,还需要实施某种针对基于时间或功率的侧信道攻击的保护。