我正在创建一个公钥生成器,我做 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 位平台上,anunsigned long
最多可以超过 40 亿。
32 位无符号长整数最大值是 4294967295。您的乘法是 465044050049,它会溢出无符号长整数。
4294967295 (ULONG_MAX)
<
465044050049 (your result)
<
18446744073709551615 (ULONG_LONG_MAX)
您需要使用 unsigned long long(64 位无符号整数类型)(假设您的系统支持它们,所有现代系统都支持)
无论平台如何,您都不能仅使用 C 的内置整数类型进行公钥加密。当代密码学处理至少 1024 位宽的数字,如果在软件中实现,则需要支持如此大值的库。