0

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

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

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

我正在尝试乘以:

872017*533297

4

3 回答 3

1

您可能会溢出该值。请记住,在 32 位平台上,anunsigned long最多可以超过 40 亿。

于 2013-02-16T03:25:39.860 回答
1

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

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

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

于 2013-02-16T03:27:07.213 回答
1

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

于 2013-02-16T10:44:47.503 回答