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
2 番目の outpt は 3255859 である必要があるため、これは明らかに間違っています。