C-RSA密码系统解密问题(无符号长不够大?)

C-RSA密码系统解密问题(无符号长不够大?),c,encryption,rsa,unsigned-long-long-int,C,Encryption,Rsa,Unsigned Long Long Int,我正在做一项任务,我必须建立一个RSA密码系统。我能够加密密码密钥没有问题,但是由于指数太大,我解密它时遇到了困难。我尝试使用无符号long-long-int,但仍然得到0的输出 #include <stdio.h> #include <stdlib.h> #include <math.h> //Unsigned long long int power function unsigned long long getPower(unsigned long lo

我正在做一项任务,我必须建立一个RSA密码系统。我能够加密密码密钥没有问题,但是由于指数太大,我解密它时遇到了困难。我尝试使用无符号long-long-int,但仍然得到0的输出

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//Unsigned long long int power function
unsigned long long getPower(unsigned long long int base, int exponent){
    unsigned long long result = 1;
    int count = 0;

    while(count != exponent){
        result *= base;
        count++;
    }

    return result;
}

int decryptFile(int cipherInt, int n, int d){
    int plainInt;
    unsigned long long int cipherIntLong = cipherInt;
    unsigned long long int power = getPower(cipherIntLong, d);

    printf("%llu\n", power);

    return (int) plainInt;
}

int main(){
    decryptFile(1394, 3127, 2011);
}
#包括
#包括
#包括
//无符号长整型幂函数
无符号long-long-getPower(无符号long-long整数基,整数指数){
无符号长结果=1;
整数计数=0;
while(计数!=指数){
结果*=基数;
计数++;
}
返回结果;
}
整数解密文件(整数加密,整数n,整数d){
整型素整型;
无符号long-long int-ciphertlong=cipherit;
无符号长整型幂=getPower(CiphertLong,d);
printf(“%llu\n”,电源);
返回(整数)整数;
}
int main(){
解密文件(13943127,2011);
}

我应该补充一点,教授没有提到使用大数字库,所以我相信我们很可能不应该在这个作业中使用大数字库。

无符号64位整数的最大值是
18446744073709551615

然而,
1394^2011
更接近于
1.296x10^6323
。这比无符号64位整数的最大值大7.02 x 10^6303倍

TL;博士:使用一个大整数库,一个非常大的库。


说真的,RSA能够计算如此大的幂的主要原因是因为RSA在模下工作,所以如果我们使用,我们需要的计算能力要少得多才能得到结果。通过将明文提升到指数,然后在最后应用模来计算结果在计算上是不可行的。

我明白了,模幂似乎是我正在寻找的解决方案。非常感谢!