私は公開鍵ジェネレータを作成していて、c = p*qを実行します。ここで、pとqは大きな素数ですが、C11875820813ではこれを取得し続けます。
long unsigned int c= p*q;
printf("C is: %d\n", c);
私は自分の番号と関係があることは知っていますが、これを修正する方法がわかりません。
私は掛け算しようとしています:
872017 * 533297
私は公開鍵ジェネレータを作成していて、c = p*qを実行します。ここで、pとqは大きな素数ですが、C11875820813ではこれを取得し続けます。
long unsigned int c= p*q;
printf("C is: %d\n", c);
私は自分の番号と関係があることは知っていますが、これを修正する方法がわかりません。
私は掛け算しようとしています:
872017 * 533297
プラットフォームに関係なく、組み込みの整数型のCのみを使用して公開鍵暗号化を行うことはできません。現代の暗号化は、少なくとも1024ビット幅の数値を処理します。これは、ソフトウェアに実装されている場合、そのような大きな値をサポートするライブラリを必要とします。
値がオーバーフローしている可能性があります。32ビットプラットフォームでunsigned long
は、最大で40億を少し超える可能性があることを忘れないでください。
32ビットのunsignedlongの最大値は4294967295です。乗算は465044050049であり、unsignedlongをオーバーフローします。
4294967295 (ULONG_MAX)
<
465044050049 (your result)
<
18446744073709551615 (ULONG_LONG_MAX)
unsigned long long(64ビットのunsigned integer型)を使用する必要があります(システムがそれらをサポートしていると仮定すると、最近のすべてのシステムでサポートされています)