Szyfr, znikanie znaków

0
 
  for n:=1 to Length(Memo1.Text) do   
  begin
    Application.ProcessMessages;
   
    m:=((Length(Memo1.Text)) mod (n)) mod (Length(Edit1.Text)); {ustalenie którego znaku klucza użyć na podstawie reszty z dzielenia}
    if m=0 then m:=1;                           //Edit1.Text nie ma znaku 0,
    ile:=ord(Edit1.Text[m]);                   //więc gdy taki się trafi wychodzi 1
    
    znak:=Memo1.Text[n];                             //pobieramy każdy znak z tekstu
    ascii:=ord(znak);                                // bierzemy kod ASCII
    ascii:= (ascii) xor (ile);                      //XORujemy
    znak := chr(ascii);                            //zmieniamy - mamy nowy znak
    Memo2.Text:=Memo2.Text + znak;                 //zapisujemy do Memo2 

    if StopNow Then Exit;                          //możliwość zatrzymania
  end;

To jest prymitywny szyfr mojego autorstwa. I pytanie: jak to możliwe, że gdy szyfruje tekst o długości około 12000 znaków to program "gubi" 10-15 symboli? Jeśli długość tekstu wejściowego była 12000 to wyjściowego wychodzi np. 11990. Wnioskuję, że jest jakiś błąd bo komputer się raczej nie myli. Nawet, jeśli nie miałoby to wpływu na znaczenie tekstu to odszyfrowanie tą metodą jest nie możliwe. Potrzebna jest niezmienna długość tekstu. Proszę o pomoc.

0

Pętle przerywa się "Break", a nie "Exit".

0

To jest fragment procedury, z której wychodzę.

@Edit Już wiem, temat można zamknąć. Czasami rezultatem

 (ascii) xor (ile) 

jest 0, a chr(0)

 nie daje nic. 

1 użytkowników online, w tym zalogowanych: 0, gości: 1