如何处理C中的大量数字

时间:2015-10-23 21:13:57

标签: c algorithm encryption

我正在用C编写RSA加密算法。我不打算在任何地方投入生产,主要是因为我可以扩展我对加密的理解。

我如何处理RSA产生的大量数字?即使使用像103这样的相对较小的私钥进行解密,我仍然有处理这样的事情的问题:

  

67 ^ 103 mod 143 =(1.21816096336830017301951805581 x 10 ^ 188)mod 143

存储多个大小的最佳方法是什么?有没有办法使用标准库?

1 个答案:

答案 0 :(得分:4)

错误的做法。 67^103 mod 143无需先计算67^103

计算循环中的modulo,一次计算1位指数。

uint32_t powmod(uint32_t base, uint32_t expo, uint32_t mod) {

  // % mod need only for the cases expo==0, mod<=1
  uint32_t y = 1u % mod;

  while (expo) {
    if (expo & 1u) {
      y = ((uint64_t) base * y) % mod;
    }
    expo >>= 1u;
    base = ((uint64_t) base * base) % mod;
  }

  return y;
}

int main(void) {
  printf("%lu",(unsigned long)  powmod(67, 103, 143));
}

输出

89