我正在进行RSA加密和解密,当我尝试pow(ascii, e) % c
时遇到了溢出问题。
我尝试了另一种方法,即将ascii
乘以e
次,每次mod c
。这应该给我一些int
或long
可以容纳的内容。但是,我没有得到正确的加密号码。
我正在尝试加密字符串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;
}
答案 0 :(得分:1)
循环应该运行e-1
次。因为在第一次迭代中你会得到正方形等等......
答案 1 :(得分:1)
int en = ascii; //这里的一个错误,en = 1