const char* N_str = "10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531469002933770824382865926730400902798743137187335810705309884635534159797732259520594337385186897629868362414475309001507719259272508669419676508606630823351242964205044695669333236417591";
const char* e_str = "10335071977839588495324343307012721241868030345867699233451500809021555989403028103743221782417440900848403102247012012875905268518785845678756696925714007988778268752026049276281025329038071087021446834856566687537729918372863729292015978809506607411711073716898691660211835403800810547133032654209857";
const char *c_star_s = "775789568255447714013247918834475198679653917741675336925599335265205597974556878796619688391490153400553690715156825186410083467239441867930362368759072824742512821423959166270736914130604102452801162684877374802075310241079026986641176079329871431448404341153307957496668749957011118721172866996397";
/*
解密函数,利用简单的选择密文攻击。
*/
void decrypt(mpz_t& plaintext, const mpz_t ciphertext, const mpz_t exp, const mpz_t modulus){
mpz_t two, inv, tem;
mpz_init_set_ui(two, 2);
mpz_init(inv);
mpz_init(tem);
mpz_powm_sec(tem, two, exp, modulus);//get 2^e
mpz_invert(inv, two, modulus);//get 2^-1
mpz_mul(tem, tem, ciphertext);//get 2^e * c
mpz_mod(tem, tem, modulus);//get (2^e * c) % n
char* s = dec(tem);// get (2^e * c)^d = 2 * m
mpz_set_str(tem, s, 10);
mpz_mul(plaintext, tem, inv);
mpz_mod(plaintext, plaintext, modulus);
mpz_clear(tem);
mpz_clear(inv);
mpz_clear(two);
}
结果:m = 101
/*
加密函数:利用GMP库的快速幂模。
*/
void encrypt(mpz_t& ciphertext, const mpz_t plaintext, const mpz_t exp, const mpz_t modulus){
mpz_powm_sec(ciphertext, plaintext, exp, modulus);
}
当 明文 m = 2,e,n 不变时,密文 c =
‘9067993150851350040249897330940003100665871287716549714273184556080551008582162191777849267361010347376371501646649765998332838344355796861130182509325000900356725318223518748891662536797029020330744349901424317997065435840708142346025689563914369112793553577470739040917484329683228525646890008609925’