2013-02-16 84 views
0

我正在创建一个公钥生成器,我做c = p * q;其中p和q是大素数,但我继续得到C 11875820813;无符号长整数乘法

long unsigned int c= p*q; 
printf("C is: %d\n", c); 

我知道我与我的号码有关,但我不知道如何解决这个问题。

我试图乘:

872017 * 533297

回答

1

你可能会溢出值。请记住,在3​​2位平台上,unsigned long最多可能超过40亿。

1

32位无符号长整型最大值是4294967295. 您的乘法是465044050049,它溢出了无符号长整数。

4294967295 (ULONG_MAX) 
    < 
465044050049 (your result) 
    < 
18446744073709551615 (ULONG_LONG_MAX) 

你需要使用一个unsigned long长(64位无符号整型)(假设你的系统支持他们,这是所有现代系统一样)

1

你不能做公共密钥加密不管平台如何,只使用内置的整数类型的C。当代密码学处理至少1024位宽的数字,如果以软件实现,则需要支持如此大数值的库。