Kezdőoldal » Számítástechnika » Programozás » Készítettem egy RSA kódoló...

Készítettem egy RSA kódoló programot, de miért nem jó?

Figyelt kérdés

Szerettem volna készíteni egy RSA-val kódoló programot. A kódban megvolt minden ami kellett. A lényeg maga a kódolási függvény nem működik, és nem jövök rá miért.

Íme a kódja:

string code(std::string bevitel,int N, int e)

{

string data;

int karakter;

long long hatvany;


int titkositott_integer_karakter;

for(unsigned i=0;i<bevitel.size();i++)

{

karakter=(int)bevitel[i];

hatvany=(int) pow(karakter,e);

titkositott_integer_karakter=hatvany %N;

karakter=(char) titkositott_integer_karakter;

data+=karakter;

}

return data;

}

AKármit adok be neki mindenből annyi n betűt csinál ahány karaktert beírok neki. De miért ?egszerűen nem jövök rá, már mindennel próbálkoztam.

Sima c-s memcpy, strcpy-vel pointerekkel, void tipusú függvénnyel, sőt még glibc buggot is találtam egyszer egy módosítás után, ami heap overflow-t csinált a 3.8.8-as kernelben,( a debuggolás legalább is ezt jelezte, és felismertem a jelenséget is magát), de nem értem miért nem tudok kódolni.

Egy másik variáció ami valszeg ugyan jól működött volna( de sikerült felülírnom), meg alulcsordult a pow függvény negatív számot adott ki és utána már minden elszállt. Nem írt ki eredménynek semmit.

Pedig megvan az primszitám is( ami Fermat, A Solovay-Strassen teszt, Miller-Rabint teszten alapulna, illetve objektumokkal csináltam az egészet. Mindegyik függvény illetve részobjektum kivállóan működik de ez nem. Valaki tudja a megoldást?



2013. máj. 10. 16:26
 1/5 anonim ***** válasza:
100%
Mindjárt ránézésre látszik nem jó a hatványozás, kis számokra is túlcsordulhat könnyen, nem beszélve arról ha a kitevő egy akkora szám hogy az int-be el sem fér (gyakorlatba 256/512/1024 bites az int 32 bites), nem beszélve a hatványozás eredményéről ami az egész háttértáron nem férne el ilyen módszerrel. Eleve ki sem kell számolni a hatványozás értékét, hanem eleve a modulo N-be kell számolni. Ezen kívül A lineáris kongruencia megoldót nem látom a kódban.
2013. máj. 10. 19:37
Hasznos számodra ez a válasz?
 2/5 A kérdező kommentje:

Köszönöm a segítséget!

Módosítottam a kódon:

-találtam egy biginteger adattipust c++ programnyelvhez a neten, ebben tárolok mindent, de gmp-vel is megcsináltam már, majd összehasonlítom, hogy melyik a hatékonyabb


-megtaláltam, hogy lehet c=m^e mod N-t közvetlenül kiszámítani nagy számokra. És működik is szerencsére


Egy probléma van, a maradék mindig nagyobb mint > 256 és ezt szeretném ASCII formátumba tenni.Emiatt nem lesz egyértelmű a függvényem a túlcsordulások miatt. A dekódolásról akkor még nem is beszéltem, ami szintén nem fogja visszaadni az eredeti karaktert. Ezt hogy lehet megoldani?

2013. máj. 12. 13:20
 3/5 anonim ***** válasza:

A gmp-t nem ismerem, a biginteger osztály meg lassú, legalábbis az amit találtam és kipróbáltam már, úgy értem hogy pl. a python sokkal gyorsabban számol "hét mérföld" hosszú számokkal.


"Egy probléma van, a maradék mindig nagyobb mint > 256 "...

Első megközelítésbe azzal a problémával találkozunk hogy csak számokat tud titkosítani az RSA, de ez nem probléma mert tulajdonképpen mindent számként lehet kezelni, pl egy kép egy nagyon nagy kettes számrendszerbeli szám. Így bármilyen adatot lehet vele titkosítani, teljesen mindegy hogy szöveg, kép, hang stb. nem kell máshogy eljárni.

Második megközelítésben tekintsük az egész titkosítandó adatot egyetlen nagy számnak és számoljunk azzal.

Igen ám de ez nagyon nagy szám lehet pl egy kép esetében egy több millió jegyű szám. Ezért ha túl nagy lenne akkor daraboljuk fel és darabonként végezzük el a titkosítást, nem bájatokra kell darabolni hanem nagyobb egységekre, akkora méretet kell venni amibe biztos hogy elfér.

2013. máj. 12. 15:30
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:

Ezt értem, csak gondoltam, hogy a kódolt adatot is vissza lehet[ne] alakítani valahogy ascii formátumba és akkor egy karaktersorozatot egy másikká tudnék alakítani. És a stringből nem egy számsorozatot kapnék, ami valahogy így néz ki pl.

kódolom ezt:

this

Ebből ezt kapom( egy megfelelő modulus és e mellett)

14589412 3210013 2100033 10506789230

Nem pedig ezt pl.

xziw

Elméletben nincs ilyen algoritmus:

c=m^e mod(N mod 224)+32? ez közvetlen ascii-re kódolna, ha a N mod 224-et ki lehet[ne] számolni.

2013. máj. 12. 17:53
 5/5 anonim ***** válasza:

"Ezt értem, csak gondoltam, hogy a kódolt adatot is vissza lehet[ne] alakítani valahogy ascii formátumba és akkor egy karaktersorozatot egy másikká tudnék alakítani."


Bármilyen bináris adatot string-é lehet alakítani, amiből egyértelműen dekódolható az eredeti bináris adat, erre találták ki a base64-et.



"kódolom ezt:

this

Ebből ezt kapom( egy megfelelő modulus és e mellett)

14589412 3210013 2100033 10506789230

Nem pedig ezt pl.

xziw"


Még sem érted, bármely 4 bájt hosszú adat egyértelműen reprezentálható egy 0 és 4 milliárd 200 millió valamennyi közötti számmal. Maximum akkora számmal mint amennyi állapota van egy akkora memóriaterületnek mínusz egy mert 0-tól sorszámozzuk az állapotokat.


Azt a 4 karakter hosszú stringet reprezentálom egyetlen számmal, nem kell darabolni mert nem túl nagy szám. (Nem állítom hogy 4 bájt egy 4 karakteres string.)


"Elméletben nincs ilyen algoritmus:

c=m^e mod(N mod 224)+32? ez közvetlen ascii-re kódolna, ha a N mod 224-et ki lehet[ne] számolni."


Kár is pazarolni az időt hogy van e, ha van is akkor szinte biztos hogy nem invertálható, dehát nem dekódolható egyértelműen.

Tegyük fel hogy van, ekkor kaptál egy olyan algoritmust ami által egy ASCII kódhoz hozzárendelsz egy másikat, előfordulási gyakoriság szerint törhető pl a magyarba a leggyakrabb az 'e' betű, ha magyar szöveg esetében meg kéne figyelni hogy melyik ASCII kód fordul elő a legtöbbször stb. Kvázi hatékonyan törhető, és ugyanúgy törhető ha ASCII karakterek helyett meghagyod a nagy számokat.

2013. máj. 13. 00:29
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!