C中的模块化指数

时间:2016-09-24 22:44:20

标签: encryption rsa exponentiation modular-arithmetic

帮助!我需要实现一个C程序(仅使用字符串,stdlib和stdio库),它们使用非常大数字的模幂运算,其中一些是260位数。我正在考虑使用链表,但我找不到如何实现它的好参考。我需要这个,因为我需要使用RSA来加密和解密消息。

另外,我在获取两个非常大的数字的GCD时遇到了完全相同的问题。有什么方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:2)

How to store large numbers? 您可以使用这种类型的存储数据,这可以帮助您使用少量内存,并且操作将比其他任何操作快得多,因为您可以将它们直接用于比特,并且您可以使用特殊公式: 要添加Irecomand,请检查溢出;

乘(x = x * y):

aux=x;x=0;
while(y)
{ 
  if(last_bit(y)==1)
     x=x+aux;
  shift_left(aux);
  shift_right(y);
}

function modular_pow(base, exponent, modulus)
{
if modulus = 1 then return 0
Assert :: (modulus - 1) * (modulus - 1) does not overflow base
result = 1
base = base mod modulus
while exponent > 0
    if (last_bit(exponent)==1):
       result = (result * base) mod modulus
    exponent = exponent >> 1
    base = (base * base) mod modulus
return result
}