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