Kezdőoldal » Számítástechnika » Programozás » Miért nem működik ez a C++...

Miért nem működik ez a C++ titkosító program?

Figyelt kérdés

Nem valami nagy durranás a program, annyi hogy van egy bementi meg egy kimeneti file. A bemeneti file-ba nyilvánvalóan azt írjuk amit le szeretnénk kódolni, aztán a program soronként végigmegy rajta: a sor minden karakterének veszi az ascii kódját, lekódolja kettes számrendszerre és a kapott bináris számokat a kimenetre írja. Amíg nem kódoltam kettes számrendszerre, csak simán az ascii kódot írtam ki addig működött, de mostmár nem. Mi az oka?

A forráskód:


#include<iostream>

#include<fstream>

using namespace std;


int code_it(char ch)

{

int asciicode;


asciicode=static_cast<int>(ch);


return asciicode;

}


int main(int argc,char* argv[])

{

ifstream from("infile.txt"); //Bemeneti file

ofstream to("outfile.txt"); //Kimeneti file


if(from.fail()) //Ha valami nincs rendben

{

cerr<<"Opening file unsuccessful\n";

cin.ignore();

cin.get();

return 0;

}

else cout<<"Input file successfully opened\n";


if(to.fail()) //Ha valami nincs rendben

{

cerr<<"Opening output file unsuccesful\n";

cin.ignore();

cin.get();

return 0;

}

else cout<<"Output file successfully opened\n";


string actual_line; //Ide olvassuk be a bemeneti file sorait


while(!from.eof()) //A file végéig

{

/*

Soronként végezzük a műveletet

Először beolvassuk az aktuális sort, majd minden egyes karakterét

kódoljuk, lefordítjuk binárisra és a kimeneti file-ba írjuk

Végezetül új sorba léptetjük a kurzort

*/


int help; //Segédváltozó


getline(from, actual_line);


for(int i=0;i<actual_line.length();++i)

{

help=code_it(actual_line[i]);


while(help!=0)

{

to<<help%2;


help/=2;

}


to<<" - ";

}

to<<endl; //Még egy üres sor

}


cout<<"Writing data into output file successfully complete.";


from.close(); //A fájlok kötelező jellegű lezárása

to.close();


cin.ignore();

cin.get();


return 0;

}


Előre is köszönöm a válaszokat!



2013. ápr. 2. 11:03
 1/5 A kérdező kommentje:
A to<<endl; sor utáni megjegyzés téves, nem üres sor, hanem a következő sor elejére állítjuk a kurzort.
2013. ápr. 2. 11:06
 2/5 iostream ***** válasza:
Ez így nem egyértelmű kódolás. Képzeld el, hogy az van az to fájlban, hogy 111. Ez most három 1-es karakter volt, vagy 1 7-es? Könnyedén feloldhatod, ha fix 8 bites hosszúságú számként írod ki.
2013. ápr. 2. 13:22
Hasznos számodra ez a válasz?
 3/5 iostream ***** válasza:

Nem szóltam, lásd: to<<" - ";


Akkor mit értesz az alatt, hogy "nem működik"?

2013. ápr. 2. 13:22
Hasznos számodra ez a válasz?
 4/5 feketel3426 válasza:

Nem tudom, megoldottad-e már a titkosító programot. Amit itt leírok, azt Turbo Pascalban írtam, aki ismeri a nyelvet, az átírhatja C++ -ba is.


Egy szöveg, vagy bármilyen file titkosítása Van egy kulcs, azt nem árulom el, hogy milyen hosszú, de elég hosszú ahhoz, hogy ne lehessen megfejteni. Ez a legkülönbözőbb karakterekből áll (betű, szám, írásjel, és még sok olyan karakter, ami nincs is rajt a billentyűzeten.). És ehhez hozzájön még a jelszó, ami a szöveg visszaállításához kell.


Rejtjelzés Visszafejtés

-------------------------------------------------------

Eredeti szöveg Titkosított szöveg

xor Kulcs karakter sorozat xor Kulcs karakter sorozat

-------------------------- --------------------------

Titkosított szöveg Eredeti szöveg


A 'xor' egy aritmetikai típusú bit orientált operátor (jelentése: kizáró-vagy).


Példa (ez csak egyetlen betű ASCII kódja kettes számrendszerben):


Rejtjelzés: Visszafejtés:

----------------------------------------------------------

11010010 = 'a' nyílt szöveg 10011001 = 'c' rejtett szöveg

xor 01001011 = 'b' kulcs xor 01001011 = 'b' kulcs

-------- ------------ -------- ------------------

10011001 = 'c' rejtett szöv. 11010010 = 'a' nyílt szöveg


A fenti példa értelmezése: csak azt kell nézni, hogy a felső szám azonos-e az alsóval, vagy különböző. Ha kölönböző akkor az eredmény 1, ha azonos, akkor 0. Az eredmény mindig a két szám különbsége. Tehát ugyanazt a műveletet kell elvégezni a rejtjelzéskor és a visszafejtéskor is. Mivel a kulcs elég hosszú, a nyílt szöveg következő betűjénél már más a kulcs, az ezt követőnél megint más stb. Gyakorlatilag egy hosszú sorozat, amíg el nem kezd ismétlődni. A klasszikus rejtjel megfejtésnél pedig első lépés az azonos karakterek megtalálása, majd azonos szavak keresése, tippelés, egészen addig, amíg ki nem alakul a teljes szöveg. Természetesen az a-b=c (c-b=a) csak példa. A valóságban ez nem igaz. Ha a kulcs végtelen hosszúságú lenne (miért ne lehetne), akkor az eredményt semmilyen módon nem lehetne visszafejteni. A kulcs egy véletlenszerű hosszú sorozat. A programot kipróbáltam TXT, DOC, JPG, EXE, MP3, AVI file-okkal, és mindig tökéletesen visszaadta az eredetit.


A programot a már elavúlt Turbo Pascal-ban írtam. De nagyon gyors. Pillanatok alatt akár több tucat megabájtos file-t is feldolgoz, ami lehet szöveg, program, kép, zene, video stb. Igaz, egy 3 GB-os video file rejtjelzése pontosan 5 percig tartott, de visszafejtés után tökéletesen működött. XP alatt az eredeti TP/TPC fordítás tökéletesen működik, Win7 alatt a Free Pascal/FPS.EXE-vel kellett lefordítani, és ott is jó. Maszk megadásával több file titkosítása is megoldható egyszerre. Példa: ft.exe szöveg.txt jelszó ft.exe = a titkosító program

szöveg.txt = bármilyen file (lehet maszk is, pl. *.doc, *.*) jelszó = jelszó (ha nem adod meg, akkor rejtetten írható be) A titkosított file első betűje # jel lesz.


Az FT.EXE program helye olyan könyvtárban legyen, ami bárhonnan elérhető. Pl.: Windows könyvtár, vagy a PATH környezeti változóban szereplő könyvtárban. Így az 'FT filenév jelszó' beírásával bárhol tudunk titkos file-t előállítani. A parancsot természetesen a Windows Commander parancssorába kell beírni. Egyszerűen FT Ctrl/Enter Enter. A filenév lehet nyílt vagy titkosított, az eredmény minidg az ellenkezője lesz. A TPC-vel lefordított EXE-vel csak max. 8+3, az FPC-vel fordítottal max. 24+4 hosszú file neveket lehet rejtjelezni.

2013. ápr. 14. 19:44
Hasznos számodra ez a válasz?
 5/5 feketel3426 válasza:
Bocs, a példákat egy kicsit összekutyulta, de ha eltolod a sorok megfelelő részét, akkor talán jó lesz.
2013. ápr. 14. 19:48
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!