1

私はプログラミングが初めてで、コーディングの宿題があります。MPIR を使用して RSA を実装する必要があります。p と q は、考えられる最善の方法で生成しました。512ビットにはできませんでしたが、このまま続けます。また、素数性についてもまだテストしていません。時間があれば、バイトサイズと素数テストを扱います。

私の問題は、Phi(n) = (p-1)*(q-1) を見つけることに関するものです。p、q、および N を見つけることができましたが、Phi(n) と N は同じ結果になります。MPIR ドキュメントの関数を何度も確認し、減算のために 2 つの同様の関数を試してみましたが、それでもうまくいきません。(q は p の繰り返しなので、ここではコードを書きませんでした。)

誰かが私を案内できますか?よろしくお願いします。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <mpir.h>
#include <cstdlib> 
#include <iostream>

using std::cout;
using std::cin;


   int main()
   {

    mpz_t p;
    mpz_init(p); 

    mpz_t randint;
    mpz_init(randint);

    gmp_randstate_t state;
    gmp_randinit_mt(state);

    mpir_ui seed;


    cout << "Please choose a number for the seed of the random number 
    generator:";
    cin >> seed;

    gmp_randseed_ui(state, seed);
    mpz_urandomb(randint, state, 512); 

    mpz_t limit;
    mpz_init(limit);
    mpz_t winner;
    mpz_init(winner);


    mpz_ui_pow_ui(limit, 2, 511);

    mpz_ior(winner, limit, randint);

    mpz_next_prime_candidate(p, winner, state);

    gmp_randclear(state);
    mpz_clear(randint);
    mpz_clear(winner);

    mpz_t q;
    mpz_init(q);

    mpz_init(randint);
    gmp_randinit_mt(state);

    cout << "Please choose a number for the seed for the random number 
    generator :";
    cin >> seed;


    gmp_randseed_ui(state, seed);
    mpz_urandomb(randint, state, 512);


    mpz_init(limit);

    mpz_init(winner);

    mpz_ui_pow_ui(limit, 2, 511);

    mpz_ior(winner, limit, randint);

    mpz_next_prime_candidate(q, winner, state);

    gmp_randclear(state);
    mpz_clear(randint); 
    mpz_clear(limit);
    mpz_clear(winner);


   // Now we find n=p*q
 
    mpz_t N; 
    mpz_init(N);

    mpz_mul(N, p, q);


    mpz_t phin;
    mpz_init(phin);


    mpz_t pa;
    mpz_init(pa);
    mpz_t qa;
    mpz_init(qa);

第1の方法

    mpz_t one;
    mpz_init(one);
    mpz_set_ui(one, 1);


    mpz_sub(pa, p, one); 
    mpz_sub(qa, q, one);

    mpz_mul(phin, pa, qa);

第二の方法

    mpz_sub_ui(pa, p, 1); 
    mpz_sub_ui(qa, q, 1);

    mpz_mul(phin, pa, qa);

次に、それらをドキュメントに書き込み、すべてをクリアします。

4

0 に答える 0