Hogyan lehet olvashatatlan formátumban menteni fájlt?
type TSor = record
Nev: string[30];
Cim: char;
Szam: array[1..3] of integer;
end;
var f: file of TSor;
Adat: TSor;
Nev: string;
Nev:='proba.ttl';
assign(f,Nev);
rewrite(f);
for i:= 1 to random(10)+1 do
begin
Adat.Nev:='asds';
Adat.Cim:=char(random(25)+97);
for j:= 1 to 3 do Adat.Szam[j]:=random(300);
write(f,Adat);
end;
close(f);
A fontos részeket kimásoltam. Ezt a fálj tudom olvasni is, ahogy kell.
Azt szeretném megoldani, hogy a proba.ttl nevű fájlt pl. notepad++szal megnyitva ne lehessen belőle semmit kivenni. Mert most ha megnyitom, akkor a számok helyén ismeretlen karakterek vannak, de a stringeket simán ki lehet olvasni. Meg tudom ezt annélkül oldani, hogy pl. egyesével beszorozgatnám a karakterek ascci kódjait. Tehát létezik erre vmi egyszerűbb módszer?
El kell kódolni a stringeket és futásidőben dekódolni. Erre van 100+ lehetőség.
Kíszűröd az általad használt karaktereket, ezt a subsetet használod fel konstansként (mondjuk keverve) és az indexükre hivatkozol.
De van még sok sok egyéb megoldás ilyesmire.
Én ezt így értelmezem, pl. ha van egy stringem:
Minden karakterem ascii kódját szorzom 3-mal és hozzáadok 7-et, beolvasáskor ugyanez, egyértelmű h így megfelelő eredményt, kapok és csak az én programom tudja megfejteni.
De esetemben write(f,Adat) itt egy recordot írok a fájlba, itt is lehet hasonlóképpen? Vagy rosszul gondolom?
Lehet, persze.
De ennél talán jobb, rövidebb ha a karaktereken valamilyen bitműveletet végzel. Mondjuk minden bitet átbillentesz, vagy csak az elsőt.
Egy pici csavarral, a string hosszának függvényében változik a kulcs:
program project1;
uses Classes, Math, SysUtils, StrUtils;
type
TSor = record
nev: string[30];
cim: char;
szam: array[1..3] of integer;
end;
var
f: file of TSor;
adat: TSor;
myFile: string;
i, j: integer;
function key1(x: extended): string;
var
alap: string;
i: integer;
begin
Result := '';
alap := '';
alap := alap + Copy(FloatToStr(Abs(Frac(Sin(x)))), 3, 10);
alap := alap + Copy(FloatToStr(Abs(Frac(Cos(x)))), 3, 10);
alap := alap + Copy(FloatToStr(Abs(Frac(Tan(x)))), 3, 10);
alap := alap + Copy(FloatToStr(Abs(Frac(ArcTan(x)))), 3, 10);
alap := alap + Copy(FloatToStr(Abs(Frac(RadToDeg(x)))), 3, 10);
alap := alap + Copy(FloatToStr(Abs(Frac(DegToRad(x)))), 3, 10);
alap := alap + ReverseString(alap);
for i := 0 to 29 do
begin
Result := Result + Chr(StrToInt(Copy(alap, (i * 4) + 1, 3)));
end;
end;
begin
myFile := 'proba.ttl';
Assign(f, myFile);
ReWrite(f);
for i := 1 to 3 do
begin
adat.nev := 'Adat' + IntToStr(i);
Write('Eredeti: ', adat.nev, ' ');
adat.nev := XorString(key1(Length(adat.nev)), adat.nev);
adat.cim := Char(Random(25) + 97);
for j := 1 to 3 do adat.szam[j] := Random(300);
Write(f, adat);
WriteLn('Kodolt: ', adat.nev, ' ', 'Dekodolt: ', XorString(key1(Length(adat.nev)), adat.nev));
end;
for i := 1 to 3 do
begin
adat.nev := 'Adat0' + IntToStr(i);
Write('Eredeti: ', adat.nev, ' ');
adat.nev := XorString(key1(Length(adat.nev)), adat.nev);
adat.cim := Char(Random(25) + 97);
for j := 1 to 3 do adat.szam[j] := Random(300);
Write(f, adat);
WriteLn('Kodolt: ', adat.nev, ' ', 'Dekodolt: ', XorString(key1(Length(adat.nev)), adat.nev));
end;
for i := 1 to 3 do
begin
adat.nev := 'Adat00' + IntToStr(i);
Write('Eredeti: ', adat.nev, ' ');
adat.nev := XorString(key1(Length(adat.nev)), adat.nev);
adat.cim := Char(Random(25) + 97);
for j := 1 to 3 do adat.szam[j] := Random(300);
Write(f, adat);
WriteLn('Kodolt: ', adat.nev, ' ', 'Dekodolt: ', XorString(key1(Length(adat.nev)), adat.nev));
end;
Close(f);
ReadLn;
end.
@#5:
Itt a #6 hozzászólás második programjában sokkal kevésbé furmányos módon, de ilyesfélével szívattam a lusta kérdezőt (aki a jelek szerint azóta sem vette a fáradságot, hogy megtalálja az egyszerű trükköt, amivel kifoghat a bárgyú „titkosításon”):
http://www.gyakorikerdesek.hu/szamitastechnika__programozas_..
Sajna, az a gépem éppen tönkrement, amelyiken a titkosítást végző programot írtam, ezért azt nem közlöm, de nem túl nehéz rekonstruálni, csak most megyek a dolgomra...
Csavar nélkül, 1 bites eltolással:
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!