C算法避免了RSA期间pow和mod的溢出

时间:2015-08-19 03:03:38

标签: c encryption integer-overflow

我正在进行RSA加密和解密,当我尝试pow(ascii, e) % c时遇到了溢出问题。

我尝试了另一种方法,即将ascii乘以e次,每次mod c。这应该给我一些intlong可以容纳的内容。但是,我没有得到正确的加密号码。

我正在尝试加密字符串Hello。预期的输出应该是

1148 326 1145 1145 1780 

但我得到了

1343 1450 379 379 855 

这就是我所拥有的

int main(int argc, const char *argv[]) {
   char buff[128];
   strncpy(buff, "Hello\n",6);

   int n = 0;
   while(buff[n] != '\n') {
      int i;
      int ascii = (int)buff[n];
      int en = ascii;

      int e = 451; // example
      int c = 2623; // example
      // instead of raising to power of e, multiply by itself e times
      // then mod c each time
      for (i = 0; i < e; i++) {
         en = (en * ascii) % c;
      }
      fprintf(stdout, "%d ", en);

      n++;
   }
   fprintf(stdout, "\n");

   return 0;
}

2 个答案:

答案 0 :(得分:1)

循环应该运行e-1次。因为在第一次迭代中你会得到正方形等等......

答案 1 :(得分:1)

int en = ascii; //这里的一个错误,en = 1