我正在尝试实施 RSA 加密方案。它是这样的:
encrypted data = ((message)^e) % n
和decrypted data = ((encrypted data)^d) % n
我试图在 c 中实现这一点。这是代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(){
long int num = 3255859;
long int encrypt =(int)pow((double) num,3) % 33;
printf("%ld\n",encrypt);
return 0;
}
我编译这个使用gcc -Werror -g -o encrypt encrypt.c -lm
这是我得到的输出 = -2
,这显然是错误的。当我为较小的数字尝试此代码时,我得到了正确的结果。例如:
当我设置时num = 2
,我得到了正确的结果,即8
我知道我要么输入错误,要么我在某处用完了边界。我确实需要使用此代码来加密像上面代码中的大数字。
你能指出我哪里出错了。
谢谢
编辑:
好的,根据@Micael Oliver 的建议,这里是修改后的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(){
unsigned long long num = 3255859;
long long encrypt =(long long)pow((double) num,3) % 33;
printf("%llu\n",encrypt);
long long decrypt =(long long)pow((double) encrypt,7) % 33;
printf("%llu\n",decrypt);
return 0;
}
这是此代码的输出:
Notra:Desktop Sukhvir$ gcc -Werror -g -o encrypt encrypt.c -lm
Notra:Desktop Sukhvir$ ./encrypt
18446744073709551608
18446744073709551614
这显然是错误的,因为第二个输出应该是 3255859