Buon pomeriggio a tutti,
da qualche giorno ho deciso di buttarmi sul C++ come principale linguaggio utilizzato per implementare la crittografia con la libreria Miracl, che per un principiante come me risulta piuttosto facile dato che ha una buona documentazione e sul web si trovano tanti esempi. Allora ho preso un esempio di RSA+Crt (pk-demo.cpp) e dopo averlo linkato con la libreria x64 compilata da me, risulta perfettamente funzionante fino a 1024 bit. Purtroppo se genero p e q con 2048 bit, il programma mi da errore in corrispondenza dell'output di cout. Non conoscendo il C++, presumo che ci possa essere un errore legato alla lunghezza dell'output, ma questo lo chiedo a qualche esperto che certamente potrà risolvere molto velocemente questo mio quesito da puro newbie. Qui sotto il listato e l'output su console. Grazie in anticipo a chiunque vorrà gentilmente intervenire. Ciaooo!!!
da qualche giorno ho deciso di buttarmi sul C++ come principale linguaggio utilizzato per implementare la crittografia con la libreria Miracl, che per un principiante come me risulta piuttosto facile dato che ha una buona documentazione e sul web si trovano tanti esempi. Allora ho preso un esempio di RSA+Crt (pk-demo.cpp) e dopo averlo linkato con la libreria x64 compilata da me, risulta perfettamente funzionante fino a 1024 bit. Purtroppo se genero p e q con 2048 bit, il programma mi da errore in corrispondenza dell'output di cout. Non conoscendo il C++, presumo che ci possa essere un errore legato alla lunghezza dell'output, ma questo lo chiedo a qualche esperto che certamente potrà risolvere molto velocemente questo mio quesito da puro newbie. Qui sotto il listato e l'output su console. Grazie in anticipo a chiunque vorrà gentilmente intervenire. Ciaooo!!!
Codice:
SetConsoleTextAttribute(hConsole, 4);
cout << "\n*** Now generating 2048-bit random primes p and q, then calculate n ..." << endl;
for(;;)
{
p=rand(1024*2,2);
if (p%2==0) p+=1;
while (!prime(p)) p+=2;
q=rand(1024*2,2);
if (q%2==0) q+=1;
while (!prime(q)) q+=2;
n=p*q;
e=65537;
phi=(p-1)*(q-1);
if (gcd(e,phi)!=1) continue;
d=inverse(e,phi);
break;
}
SetConsoleTextAttribute(hConsole, 15);
cout <<"\np=" << p << endl;
cout <<"\nq=" << q << endl;
cout <<"\nn=p*q=" << n << endl;
Codice:
*** Now generating 2048-bit random primes p and q, then calculate n ...
p=30981519717916345767084068504480330252269195696873928280843407540446865462354207030052342902159602166882707751155427719454798225804387713841577017148259376441628770611912017369615871196645732404776702227390285887684718182609545962633740045799106365659614173277902815508634298749691460249904055045705563251465636049931472429472366181398900038567726425954140620095198230174096442456915151333909958999526516957473395714321218838172588538170630394424612091143992120207861667803684730278611024049307527426524861856605637886136280895134980317750931034192440324871714420559893046460618652535801942511054393994259551349247541
q=31985407324293729397174030251266099061523246140809783875823849135067898108503721784178839062636567764060047212556404284153076116757331721257175458794098237449640334748646670222608767142571543457542733040738579344335494403141326644209328278531340934389489232786111702464160413683726545570987062226013608809244970061374951117454028462304149111924812016060588450804560822689915645344484119191705168843467694925177506796078551447678833038067500528583870673544284281667860101506574991043266494478739013384274195814950346522801655968576719946790117147508912542924348455103995168823101138757377950398039616184244235147013791
n=p*q=
MIRACL error from routine otstr
called from cotstr
called from your program
I/O buffer overflow