Miért nem működik ez a C++ titkosító program?
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!
Nem szóltam, lásd: to<<" - ";
Akkor mit értesz az alatt, hogy "nem működik"?
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!