Avatar billede huggebanden Nybegynder
13. april 2003 - 02:39 Der er 11 kommentarer og
1 løsning

Kryptering

Jeg har prøvet at lave et program der kan kryptere indholdet i en memo efter en krypteringskode. Hvis jeg laver krypteringskoden for lang kommer der en fejl.. det er ikke altid den samme her er 2:
http://www.geocities.com/huggebanden/krypterfejl.gif
http://www.geocities.com/huggebanden/kryptfejl2.gif

her er koden:
function krypt(tekst,kode:string):string;
var
  I,k: integer;
begin
  I := 0;
  repeat
      for k := 1 to length(kode) do
      begin
        inc(I);
        tekst[I] := chr(ord(tekst[I])+ord(kode[k]));
      end;
  until I >= length(tekst);
  result := tekst;
end;

function dekrypt(tekst,kode:string):string;
var
  I,k: integer;
begin
  I := 0;
  repeat
      for k := 1 to length(kode) do
      begin
        inc(I);
        tekst[I] := chr(ord(tekst[I])-ord(kode[k]));
      end;
  until I >= length(tekst);
  result := tekst;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  memo2.Text := krypt(memo1.Text,edtKryptkode.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  memo1.Text := dekrypt(memo2.Text,edtKryptkode.Text);
end;

skal jeg lave koden helt om. eller er der et eller andet jeg har overset?
Avatar billede huggebanden Nybegynder
13. april 2003 - 02:52 #1
Avatar billede erikjacobsen Ekspert
13. april 2003 - 09:14 #2
Hvis din kode er på 3 bogstaver, og din tekst på 5
så vil første gennemløb af koden gå godt, men anden gang
er der kun 2 bogstaver tilbage i testen, men du løber
3 gange igennem med koden.

Det er nok derfor :)
Avatar billede arne_v Ekspert
13. april 2003 - 09:15 #3
Prøv med:

function krypt(tekst,kode:string):string;
var
  I,k: integer;
begin
  for I := 1 to length(tekst) do
  begin
      for k := 1 to length(kode) do
      begin
        tekst[I] := chr(ord(tekst[I])+ord(kode[k]));
      end;
  end;
  result := tekst;
end;

function dekrypt(tekst,kode:string):string;
var
  I,k: integer;
begin
  for I := 1 to length(tekst) do
  begin
      for k := 1 to length(kode) do
      begin
        tekst[I] := chr(ord(tekst[I])-ord(kode[k]));
      end;
  end;
  result := tekst;
end;
Avatar billede erikjacobsen Ekspert
13. april 2003 - 09:16 #4
Du skal nok ...

  for l=1 to length(tekst) do
  begin
    k = (l mod length(kode))+1;
    tekst[l] := chr(ord(tekst[l])-ord(kode[k]));
  end;
Avatar billede arne_v Ekspert
13. april 2003 - 09:18 #5
Men iøvrigt tror at du i virkeligheden mener:

function krypt(tekst,kode:string):string;
var
  I,k: integer;
begin
  for I := 1 to length(tekst) do
  begin
    tekst[I] := chr(ord(tekst[I])+ord(kode[(I mod k)+1]));
  end;
  result := tekst;
end;

function dekrypt(tekst,kode:string):string;
var
  I,k: integer;
begin
  for I := 1 to length(tekst) do
  begin
    tekst[I] := chr(ord(tekst[I])-ord(kode[(I mod k)+1]));
  end;
  result := tekst;
end;
Avatar billede arne_v Ekspert
13. april 2003 - 09:20 #6
Den slap Erik bedre fra end mig:

function krypt(tekst,kode:string):string;
var
  I: integer;
begin
  for I := 1 to length(tekst) do
  begin
    tekst[I] := chr(ord(tekst[I])+ord(kode[(I mod length(kode))+1]));
  end;
  result := tekst;
end;

function dekrypt(tekst,kode:string):string;
var
  I: integer;
begin
  for I := 1 to length(tekst) do
  begin
    tekst[I] := chr(ord(tekst[I])-ord(kode[(I mod length(kode))+1]));
  end;
  result := tekst;
end;
Avatar billede erikjacobsen Ekspert
13. april 2003 - 09:20 #7
Ja, Arne - ik' os'? ;)
Avatar billede huggebanden Nybegynder
14. april 2003 - 16:27 #8
hvad betyder mod?
Avatar billede arne_v Ekspert
14. april 2003 - 16:29 #9
mod = modulus = rest ved division

10 mod 4 = 2
Avatar billede huggebanden Nybegynder
14. april 2003 - 16:42 #10
ok
Avatar billede athlon-pascal Juniormester
16. april 2003 - 16:02 #11
Er tallet lige?

function LigeTal(I: Integer): Boolean;
begin
  Result := I mod 2 = 0;
end;
Avatar billede arne_v Ekspert
16. april 2003 - 16:06 #12
Nu antyder dit nick jo at du har rimeligt styr på Pascal.

Men jeg ville skrive det som:

Result := ((I mod 2) = 0);

bare sådan for at folk der ikke kan huske præcedens reglerne også
har en chance.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester