繁体   English   中英

无符号长整数乘法

[英]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

您可能溢出了值。 请记住,在3​​2位平台上, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM