C++个大数字
C++ big numbers
我正在尝试为一个项目实现 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;}
谢谢!
为了表示大于任何基元类型的整数,可以使用整数数组,其中数组的每个数字表示较大数字的不同字节。这称为任意精度算术。对于这种"大"数字类型,必须单独实现每个算术运算以及输入和输出。
对于较大的数字,您需要在单个函数中进行模幂运算。这意味着您在进行计算时执行模量。当然,之后的操作可以完成,但是:
- 它占用更多的位和
- 它的效率不高。
作为一个(低效的(例子,您可以将幂视为执行基数乘法,然后取模并重复该过程,直到您执行了e
乘法(当然,从 1 值而不是基数开始(。
在大多数(加密(库中,您都有某种提供modPow
方法的bignum
库。请注意,拥有此类功能本身不足以创建安全的 RSA 操作;通常,还需要实施某种针对基于时间或功率的侧信道攻击的保护。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 将数字打印成文字
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 在将数字随机生成为数组期间从内存输出随机数的数组