Jump to content

ALGORITMI: Teoretiska ideja par algoritma ''sabojasanu''


Guest inx
 Share

Recommended Posts

1. Dots algoritms, kursh kriptee textu.

2. Algoritms nestraadaa.

3. Algoritms straadaa.

 

1. Mans datu kripteeshanas algoritms sastaav no piecaam daljaam jeb var arii teikt, ka tas ir viens algoritms, kursh satur piecus apakshalgoritmus, kas ir viens otram seciigi pakaartoti. Liidzko, piemeeram, pirmais apakshalgoritms nesatur kaadu soli, tas vairs nestraadaa un izraisa kjeedes reakciju uz paareejiem apakshalgoritmiem.

 

2. Pirmaa apakshalgoritma darbiibas princips ir vienkaarsh: tiek defineets 3D masiivs, piem., [0..7,0..7,0..4], kuraa tiek ielasiita visa ASCII tabula. Ielasiishanu veic shaadi:

 


//------------------------------------------------------------------

// pirmaa kodeeshana, visus simbolus nomaina ar 3D koordinaataam

// no ASCII masiiva

//

begin

    u := 0;

    uu := 0;

    nr := 1;



// izveido 3D masiivu ar ASCII kodu tabulas simboliem

    for x := 0 to 7 do

     begin

      for y := 0 to 7 do

       begin

        for z := 0 to 3 do

         begin

          ASCII[x,y,z] := Chr(u);

          u := u + 1;

         end;

       end;

     end;



// nosaka katra simbola koordinaatas peec ASCII masiiva un saglabaa

// triisciparu kombinaaciju failaa

{     InputFile := MainForm.OpenDialog1.FileName; }

    InputFile := 'C:Haldors_RTUKursadarbijaunsmsgtest.txt';

    AssignFile(IFile, InputFile);

    Reset(IFile, 1);



    FSize1 := FileSize(IFile);



    AssignFile(OFile, 'C:Haldors_RTUKursadarbijaunscoded1.txt');

    Rewrite(OFile);

    Edit2.Text := 'coded1.txt';



    while not Eof(IFile) do

     begin

      Application.ProcessMessages;

      EncFile.Gauge1.Progress := Trunc((FSize1/nr) * 100);



      BlockRead(IFile, Character, SizeOf(Character), NumRead);



      for xx := 0 to 7 do

       begin

        for yy := 0 to 7 do

         begin

          for zz := 0 to 3 do

           begin

             if string(ASCII[xx,yy,zz]) = Character then

               begin

                Block[uu] := IntToStr(xx) + IntToStr(yy) + IntToStr(zz);

                Write(OFile, Block[uu]);

               end;

           end;

         end;

       end;

       nr := nr + 1;

     end;



CloseFile(IFile);

CloseFile(OFile);

 

Shis kods izveido failu coded1.txt, kuraa tiek saglabaatas katra simbola koordinaatas.

 

Es, pirms kodeeshanas, uzdodu jautaajumu, lai ievada paroli. Parolei jaasatur informaacija par ASCII[x,y,z] masiivu - ka x = [0..7], y = [0..7] un z = [0..4]. Ja parole ir nepareiza, tad masiivs tiek izveidots nepareizi un visi FOR..TO..DO cikli arii tiek defineeti nepareizi. Tas noziimee:

 

1) masiivs var nebuut 256 vieniibu liels;

- ja tas ir lielaaks, tad naakamie algoritmi nesapratiis, kaadas koordinaatas izmantot. Piemeeram:

 


//------------------------------------------------------------------

// treshaa kodeeshana: sadala koordinaashu ciparus pa paariem

// un paarus aizvieto ar burtiem, cipariem vai interpunkcijas

// ziimeem no masiiva

//

begin

     i := 0;

     g := 0;

     nr := 1;



// izveido masiivu tikai ar lielajiem burtiem

     for brnr := 65 to 90 do

       begin

         Letters[g] := Chr(brnr);

         g := g + 1;

       end;

// pieliek masiivaa mazos burtus

     for brnr := 97 to 122 do

       begin

         Letters[g] := Chr(brnr);

         g := g + 1;

       end;

// pieliek masiivaa ciparus no 0 liidz 9

     for brnr := 49 to 58 do

       begin

         Letters[g] := Chr(brnr);

         g := g + 1;

       end;

// pieliek masiivaa interpunkcijas ziimes

     for brnr := 33 to 48 do

       begin

         Letters[g] := Chr(brnr);

         g := g + 1;

       end;



// izveido masiivu ar divciparu skaitljiem liidz 88

     LetterNr[0] := 00;

     LetterNr[1] := 01;

     LetterNr[2] := 02;

     LetterNr[3] := 03;

     LetterNr[4] := 04;

     LetterNr[5] := 05;

     LetterNr[6] := 06;

     LetterNr[7] := 07;

     LetterNr[8] := 08;

     LetterNr[9] := 09;



     for j := 10 to 77 do

         LetterNr[j] := j;



     InputFile := 'C:Haldors_RTUKursadarbijaunscoded1.txt';

     OutputFile := 'C:Haldors_RTUKursadarbijaunscoded3.hbe';



     AssignFile(IFile, InputFile);

     Reset(IFile, 1);



     FSize3 := FileSize(IFile);



     AssignFile(OFile, OutputFile);

     Rewrite(OFile);



     Edit1.Text := OnlyName(InputFile);

     Edit2.Text := OnlyName(OutputFile);



// aizvieto koordinaashu paarus ar kaadu simbolu no simbolu

// masiiva (Lielais/mazais burts, cipars vai interpunkcijas ziime)

     while not Eof(IFile) do

      begin

       i := 0;

       Application.ProcessMessages;

       EncFile.Gauge3.Progress := Trunc((FSize3/nr) * 100);



       BlockRead(IFile, SimulateCode, SizeOf(SimulateCode), NumRead);



       repeat

         if (LetterNr[i] = StrToInt(SimulateCode)) then

          begin

            Write(OFile, Letters[StrToInt(SimulateCode)]);

            Break;

          end

         else

            i := i + 1;

       until (LetterNr[i-1] = StrToInt(SimulateCode));



      nr := nr + 2;

      end;



 CloseFile(IFile);

 CloseFile(OFile);

 

..un visa shifreeshana ir veejaa. Algoritms vairs nedarbojas...

 

3. Taa kaa ir 8 iespeejas, kaadaa virzienaa es saaku simbolu ielasiishanu masiivaa, t.i., A var buut [0,0,0] vai A = [0,0,4], vai A = [0,7,0]... utt., tiek izveidotas astonjas paroles, kas satur attieciigo informaaciju par masiivu un simbolu ielasiishanas veidu masiivaa, kaa arii veidu, kaa simboli masiivaa tiek mekleeti peec koordinaataam, lai peectam failaa ierakstiitu pareizos simbolu "kodus".

 

Kas ir veikts? Ir algoritms, kas veic ASCII simbolu ielasiishanu masiivaa; no shifreejamaas virknes njemto simbolu saliidzinaashana ar ASCII masiivu; atrastas atbilstoshaas koordinaatas; saglabaatas failaa. Ja nav pareiza parole, tad masiivs vai nu netiek pareizi uzdots un algoritmu var izmest miskastee, jo sekojoshie algoritmi nesapratiis, ko un cik jamiem dariit, un tiks izmesta EXCEPTION, vai arii masiivu proga meegjinaas defineet nepareizi, jo nepietiks datu pilnai masiiva defineeshanai, piemeeram, x tiks defineets un y tiks defineets, bet z paliks "tukshs", un akal tiks izmests EXCEPTION.

 

Ar shaadiem panjeemieniem var "sabojaat" katru no pieciem apakshalgoritmiem. Visa beigaas tiek gjenereeta jauna atsleega (parole), kas satur infu par to, kaadi parametri ir izmantoti pie shifreeshanas. Deshifreeshanas algoritmi tiek bojaati liidziigaa veidaa.

 

Resp., algoritms ir zinaams bez dotiem parametriem. Nav parametru, nav jeega algoritmam...

 

P.S. Shito fiichu es shobriid programmeeju. Kad buus gatavs, iemetiishu kodu. :)

 

Juusu apsveerumi un ieteikumi?

Link to comment
Share on other sites

Tikai dazhas piebildes par koda efektivitaati kaa taadu :)

 

BlockRead(IFile, Character, SizeOf(Character), NumRead); 

 

Kas tas taac? Ar BlockRead lasiit pa vienam characterim laikam jau, ka nebuus pats aatrdarbiigaakais fails, kaa lasiit failu. Blockread blokam normaali jaabut vismaz kaadiem 4KB, lai atmaksaatos lietot BlockRead. Ja gribi lasiit pa vienam charam, tad raksti Read(IFile, Character)....

 

      for xx := 0 to 7 do 

       begin 

        for yy := 0 to 7 do 

         begin 

          for zz := 0 to 3 do 

           begin 

             if string(ASCII[xx,yy,zz]) = Character then 

               begin 

                Block[uu] := IntToStr(xx) + IntToStr(yy) + IntToStr(zz); 

                Write(OFile, Block[uu]); 

               end; 

           end; 

         end; 

       end;

 

lai atrastu chara poziiciju, Tu skrien cauri visam masiivam... tas pacelj visa algoritma sarezhgjiitiibu par xmax*ymax*zmax.... Ko Tu dariisi, ja gribeesi saglabaat nevis charus, bet dubultcharus (masiiva izmeers 2^16)?

eksistee taadi operaatori mod un div....

cord:=ord(character);

zz:=cord mod 4;

cord:=cord div 4;

yy:=cord mod 8;

xx:=cord div 8;

...

Tas aatraa acu uzmetienaa viss :)

Link to comment
Share on other sites

Guest inx
Tikai dazhas piebildes par koda efektivitaati kaa taadu :)

 

BlockRead(IFile, Character, SizeOf(Character), NumRead); 

 

Kas tas taac? Ar BlockRead lasiit pa vienam characterim laikam jau' date=' ka nebuus pats aatrdarbiigaakais fails, kaa lasiit failu. Blockread blokam normaali jaabut vismaz kaadiem 4KB, lai atmaksaatos lietot BlockRead. Ja gribi lasiit pa vienam charam, tad raksti Read(IFile, Character)....

[/quote']

 

Cik zinu, tad Read darbojas Texta failiem. Man ir uzdots Character : array [0..4095] of Char.

 

      for xx := 0 to 7 do 

       begin 

        for yy := 0 to 7 do 

         begin 

          for zz := 0 to 3 do 

           begin 

             if string(ASCII[xx,yy,zz]) = Character then 

               begin 

                Block[uu] := IntToStr(xx) + IntToStr(yy) + IntToStr(zz); 

                Write(OFile, Block[uu]); 

               end; 

           end; 

         end; 

       end;

 

lai atrastu chara poziiciju, Tu skrien cauri visam masiivam... tas pacelj visa algoritma sarezhgjiitiibu par xmax*ymax*zmax.... Ko Tu dariisi, ja gribeesi saglabaat nevis charus, bet dubultcharus (masiiva izmeers 2^16)?

eksistee taadi operaatori mod un div....

cord:=ord(character);

zz:=cord mod 4;

cord:=cord div 4;

yy:=cord mod 8;

xx:=cord div 8;

...

Tas aatraa acu uzmetienaa viss :)

 

Atvaino, bet shaadi atteelots kods ir tikai taadeelj, lai buutu paarskataamaak tiem, kas tik labi neorienteejas programmeshanaa. Tieshi shii iemesla deelj es nedevu optimizeetu kodu. :)

 

Paldies par padomu: ar MOD un DIV man nebija ienaacis padarboties. Katraa zinjaa, tas daudzko atrisinaas... :)

Link to comment
Share on other sites

Tikai dazhas piebildes par koda efektivitaati kaa taadu :)

 

BlockRead(IFile, Character, SizeOf(Character), NumRead); 

 

Kas tas taac? Ar BlockRead lasiit pa vienam characterim laikam jau' date=' ka nebuus pats aatrdarbiigaakais fails, kaa lasiit failu. Blockread blokam normaali jaabut vismaz kaadiem 4KB, lai atmaksaatos lietot BlockRead. Ja gribi lasiit pa vienam charam, tad raksti Read(IFile, Character)....

[/quote']

 

Cik zinu, tad Read darbojas Texta failiem. Man ir uzdots Character : array [0..4095] of Char.

 

      for xx := 0 to 7 do 

       begin 

        for yy := 0 to 7 do 

         begin 

          for zz := 0 to 3 do 

           begin 

             if string(ASCII[xx,yy,zz]) = Character then 

               begin 

                Block[uu] := IntToStr(xx) + IntToStr(yy) + IntToStr(zz); 

                Write(OFile, Block[uu]); 

               end; 

           end; 

         end; 

       end;

 

lai atrastu chara poziiciju, Tu skrien cauri visam masiivam... tas pacelj visa algoritma sarezhgjiitiibu par xmax*ymax*zmax.... Ko Tu dariisi, ja gribeesi saglabaat nevis charus, bet dubultcharus (masiiva izmeers 2^16)?

eksistee taadi operaatori mod un div....

cord:=ord(character);

zz:=cord mod 4;

cord:=cord div 4;

yy:=cord mod 8;

xx:=cord div 8;

...

Tas aatraa acu uzmetienaa viss :)

 

Atvaino, bet shaadi atteelots kods ir tikai taadeelj, lai buutu paarskataamaak tiem, kas tik labi neorienteejas programmeshanaa. Tieshi shii iemesla deelj es nedevu optimizeetu kodu. :)

 

Paldies par padomu: ar MOD un DIV man nebija ienaacis padarboties. Katraa zinjaa, tas daudzko atrisinaas... :)

 

Read darbojas arii file of char, file of whateverrecord, utt... tikai lasot, jaalasa attieciigais tips. No textfile jau var lasiit kaa ienaak praataa (gandriiz).

Bet par to algorima nojaukshanu: Ja ir nosaciijums, ka x*y*z=256, tad Tev ir jaaparuupeejas, lai lietoaajs nevareetu ievadiit shai vienaadiibai neatbilstoshus x, y & z. Ja nenotiek nekaads inputa checkings, tad logjiski, ka var sabarot "da jebko". Tu kaa programmeetaajs vienkaarshi nedriiksti pieljaut, ka lietotaajs driikst ievadiit kaut ko taadu, kas gan neko nepasakot aizkodees failu, bet peec tam vairs atkodeet nevarees. Pienjemsim, ka lietotaajs plaintextu izdzeesh... Taa jau saucas kritiska programmatuuras kljuuda, un no taadaam ir obligaati jaatiek valjaa.

 

Veel... ja character=array[0...4095] of char, tad wft ir saliidzinaashaan:

if string(ASCII[xx,yy,zz]) = Character then ?

Ok, pienjemu, ka esi apgraiziijis kodu saprotamiibas deelj :)

Link to comment
Share on other sites

Guest inx

Read darbojas arii file of char' date=' file of whateverrecord, utt... tikai lasot, jaalasa attieciigais tips. No textfile jau var lasiit kaa ienaak praataa (gandriiz).

[/quote']

 

Hmmm, tad man jaapaskataas cauri, kur esmu sataisiijis kljuudas. Ne shajaa progaa. Man nezkaapeec bija shkjitis, ka Read bakstaas TIKAI ar texta failiem. Paldies! Apstiishos. :)

 

Bet par to algorima nojaukshanu: Ja ir nosaciijums' date=' ka x*y*z=256, tad Tev ir jaaparuupeejas, lai lietoaajs nevareetu ievadiit shai vienaadiibai neatbilstoshus x, y & z. Ja nenotiek nekaads inputa checkings, tad logjiski, ka var sabarot "da jebko". Tu kaa programmeetaajs vienkaarshi nedriiksti pieljaut, ka lietotaajs driikst ievadiit kaut ko taadu, kas gan neko nepasakot aizkodees failu, bet peec tam vairs atkodeet nevarees. Pienjemsim, ka lietotaajs plaintextu izdzeesh... Taa jau saucas kritiska programmatuuras kljuuda, un no taadaam ir obligaati jaatiek valjaa.

[/quote']

 

Esmu par to padomaajis, jo pirms stundas pac uz shito probzu uzraavos. Nebiju padomaajis par oficiaalo lietotaaju, bet tikai par to, lai nojauktu algoritmu cilveekiem, kas to meegjinaatu atkost. :)

 

Veel... ja character=array[0...4095] of char' date=' tad wft ir saliidzinaashaan:

if string(ASCII[xx,yy,zz']) = Character then ?

Ok, pienjemu, ka esi apgraiziijis kodu saprotamiibas deelj :)

 

Tieshi taadeelj, ka SHIM kodam ir Character : Char;. :)

Link to comment
Share on other sites

Guest inx

STARP CITU, vakar man atsuutiija kodeetaa teksta atmineejumu. PAREIZU... ;) Diemzheel, tas paraadiijaas tikai peec source code publiceeshanas, bet es cilveekam apsoliiju vismaz vienu alu uzsaukt par centiibu, ka ir copy/paste kodu savaa progaa un piemetis klaat fiichas, lai textu jeedziigi ieraudziitu. Turklaat, shis cilveeks ir ruupiigi lasiijis, ko es rakstiiju... ;)

 

Atkodeetaaja niks ir Doks :) Veixmi!

Link to comment
Share on other sites

hmm kripteeshanas sacensiibinjas buutu tiiri jauks pasaakums..

tikai ir divi truukumi - 1. ja nav publiceets algoritms ir gruuti uzlauzt

2. ja ir publicets source tad ir gruti uztaisiit tadu algoritmu lai nebuutu viegli uzlauzt... (pretpiemers RSA)

Link to comment
Share on other sites

no otras puses pasham vienmer droshaak buus izmantot savu algoritmu par kura eksistenci nevienam nemaz nav nekaadas nojausmas..

(ja vien shis algoritmam nav kaada acimredzama vaajiiba)

Link to comment
Share on other sites

no otras puses pasham vienmer droshaak buus izmantot savu algoritmu par kura eksistenci nevienam nemaz nav nekaadas nojausmas..

(ja vien shis algoritmam nav kaada acimredzama vaajiiba)

Problēma ir apstāklī' date=' ka ekstremāli mazticams, ka tev sanāks uztaisīt tiešām spēcīgu algoritmu (to pierāda vēsture). Bez tam loti sarežģīti ir paturēt algoritmu slepenībā. Tādēļ vispareizākais ir izmantot, kādu no publiski pieejamajiem algoritmiem, bet neafišēt, kurš tieši algoritms tiek izmantots.[/quote']

nu ja vajag slepeniibaa jau nav nemaz tik gruuti saglabat algoritmu..

protams nevajag jau metaties apkart redziet kadi man neatshifrejamie suerslepenie dati..

protams tas attiecas tikai uz situacijam kad dati jaglaba vai jalieto shaura personu lokaa... ja dati japarsuuta katru dienu citam japarshifre jaatshifree utt tad taads "vieteejais" algoritms uz aatru roku diez vai deres..

bet ja kaut kaadi dati vienkarshi kaut kur glabaajas sazin kaut kaada atteelojumaa tad pat ir faktiski maz ticams ka kaads tos spees atlauzt..

problemas rodas tad ja visiem ir zinams kas ir apakshaa vai arii ir zinaams kadus datus dodot iekshaa kaadi naak laukaa - tad paradaas reaala vajadziiba peec laba algoritma

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...