unsigned long int multiplication

时间:2013-02-16 03:23:36

标签: c public-key-encryption

我正在创建一个公钥生成器,我做c = p * q;其中p和q是大质数,但我继续得到C 11875820813;

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

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

我想成倍增加:

872017 * 533297

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

32位无符号长最大值为4294967295。 你的乘法是465044050049,它溢出了无符号长。

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

你需要使用无符号长long(64位无符号整数类型)(假设你的系统支持它们,所有现代系统都这样做)

答案 2 :(得分:1)

无论平台如何,您都不能仅使用内置的整数类型的C进行公钥加密。当代密码学处理至少1024位宽的数字,如果在软件中实现,则需要支持如此大值的库。