我正在创建一个公钥生成器,我做c = p * q;其中p和q是大质数,但我继续得到C 11875820813;
long unsigned int c= p*q;
printf("C is: %d\n", c);
我知道我的数字与我的数字有关,但我不知道如何解决这个问题。
我想成倍增加:
872017 * 533297
答案 0 :(得分:1)
你可能会溢出这个值。请记住,在32位平台上,unsigned long
最多可能超过40亿。
答案 1 :(得分:1)
32位无符号长最大值为4294967295。 你的乘法是465044050049,它溢出了无符号长。
4294967295 (ULONG_MAX)
<
465044050049 (your result)
<
18446744073709551615 (ULONG_LONG_MAX)
你需要使用无符号长long(64位无符号整数类型)(假设你的系统支持它们,所有现代系统都这样做)
答案 2 :(得分:1)
无论平台如何,您都不能仅使用内置的整数类型的C进行公钥加密。当代密码学处理至少1024位宽的数字,如果在软件中实现,则需要支持如此大值的库。