Exemple #1
0
void RSA::cryptRSA (char* fileMText,char* fileKey,char *fileCrypt)
{
    string headCode="1000010010000100";/*head16bit*/
    ifstream filetext(fileMText);
    ifstream filekey(fileKey);
    ofstream filecrypt(fileCrypt);
    if(!filetext){
        cout<<"Fail!Filetext isn't exist";
        return;
    }
    if(!filekey){
        cout<<"Fail!Filekey isn't exist";
        return;
    }
    /*read key from fileKey*/
    string TEXT;
    ZZZ n,e;
    filekey>>TEXT;
    n=TEXT;
    filekey>>TEXT;
    e=TEXT;
    /*linked head16bit with bit random + KEY{128,192,256}*/
    TEXT=headCode;
    ZZ numbersite;
    RandomBits(numbersite,(2032-KEY));
    stringstream buffer;
    buffer<<numbersite;
    ZZZ code;
    code=buffer.str();
    int strlen=code.get_str(2).length();
    for(;strlen<2032-KEY;strlen++)TEXT+='1';
    TEXT+=code.get_str(2);
    filetext>>headCode;
    code=headCode;
    TEXT+=code.get_str(2);
    /*********************/
    /*C=M^e mod n*/
    code.set_str(TEXT,2);
    mpz_powm(code.get_mpz_t(),code.get_mpz_t(),e.get_mpz_t(),n.get_mpz_t());
    filecrypt<<convert_base64(code.get_str(2))<<endl;

    filecrypt.close();
    filetext.close();
    filekey.close();
}
Exemple #2
0
void RSA::createNewKey(char *filePrivateKey,char * filePublicKey)
{
    PrGlib dnthang;
    ofstream PK(filePrivateKey);
    ofstream BK(filePublicKey);
    /*Generate p and q as strong primes */
    ZZZ p=dnthang.PrG_generate_strong_prime(3072);

    ZZZ q=dnthang.PrG_generate_strong_prime(3072);
    ZZZ n=q*p;
    ZZZ phi=(p^1)*(q^1);
    ZZZ e,k;
    /*Find e such that gcd(e,phi)=1*/
    do
    {
        gmp_randclass rr(gmp_randinit_default);
		rr.seed(time(NULL));
        e =rr.get_z_bits(dnthang.PrG_get_length());
		ZZZ num = e & 1;
		if (num == 0)e = e | 1;
        mpz_gcd (k.get_mpz_t(),e.get_mpz_t(), phi.get_mpz_t());
    }while(k!=1);
    /*******************************/
    /*Compute d= e^-1 mod n*/
    ZZZ d;
    mpz_invert(d.get_mpz_t(),e.get_mpz_t(),phi.get_mpz_t());
    /*private key*/
    PK<<n.get_str()<<endl;
    PK<<d.get_str()<<endl;
    /*public key*/
    BK<<n.get_str()<<endl;
    BK<<e.get_str()<<endl;
    PK.clear();
    PK.close();
    BK.clear();
    BK.close();
}