[英]unsigned long ints multiplication
我正在创建一个公共密钥生成器,并且我做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 long(64位无符号整数类型)(假设您的系统支持它们,所有现代系统都支持)
无论平台如何,您都不能仅使用内置的整数C来进行公钥加密。 现代密码学处理的数字至少为1024位宽,如果以软件实现,则需要支持如此大值的库。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.