Kodowanie Cesara

J-23

Wszycy tutaj sie pokazują sposoby kodowania to ja tez pokaże - bardzo prosty... Oto on:

function Encode(S: String): String;
var  N: Integer; 
begin
  for N := 1 to Length(S) do // pętla od znaku 1 do konca wiersza
    Result := Result + Chr(Ord(S[N]) - 122) // tutaj jest zapisywany już gotowy znak w kodzie ASCII
end; 
function Decode(S: String): String;
var  N: Integer; 
begin
  for N := 1 to Length(S) do // pętla od znaku 1 do konca wiersza
    Result := Result + Chr(Ord(S[N]) + 122) // tutaj jest zapisywany już gotowy znak w kodzie ASCII
end;

To by było na tyle prawda że bardzo proste! Co prawda jest to metoda która obciąża komputer przy duzym tekscie ale czekam na opinie innych kolegów po fachu

13 komentarzy

Jak znajdę trochę czasu, to jutro go poprawię i dodam parę różnych sztuczek, etc.związanych z tym algorytmem.

"czekam na opinie innych kolegów po fachu" - z całym szacunkiem, ale "koledzy po fachu" robią algorytmy kodujące / dekodujące wielokrotnie dłuższe od całego tego artykułu; Szyfr Cezara to nie szyfr, nie trzeba mieć komputera żeby to w kilka minut rozkodować; Mogłeś chociaż pokazać wszystkie sztuczki, jakie można robić inkrementując / dekrementując kod ASCII - to by był artykuł a tak, to nawet do gotowców się nie nadaje;

w gruncie rzeczy to wlasciwie jest sposob kodowania cezarem, a nie artykul na ten temat. nie latwiej wyslac usera do wikipedii? tam wiecej sie dowie i do tego jeszcze zrozumie o co chodzi, a nie bedzie mial gotowca... :/

To jest artykuł? Sama nazwa artykuł mówi, że należy napisać coś na temat a nie przedstawić kawałek źródła. Szkoda że tak dużo ludzi zaśmieca ten dział. Proponuje przenieść to do gotowców. Łatwiej bedzię znaleźć.

i TO ma być artykuł??? przenieś to do gotowców, albo usuwam.

Dobry sposób. Zachęcam do obejżenia artykułu mojego autorswa, na tej stronie pt. kodowanie danych.

Witam ,kod faktycznie zawierał błędy lecz już to zostało poprawione pozdrawiam

To kodowanie rzeczywiście jest bardzo proste - przesunięcie bajtu o -122. Ja mam nieco mocniejsze a równie proste rozwiązanie (wzorowane na algorytmie Vinegere'a).

function koduj(tekst: string; password: string; flag_code: boolean):string; // funkcja z trzema parametrami zwracająca string
    var i, len_pass: integer;
        tmp_str: string;
        byte_in, byte_out, byte_pass: byte; //deklaracja zmiennych
begin
     len_pass := Length(password); //długość klucza
     for i:=1 to Length(tekst) do //pętla "obiegająca" kodowany tekst
     begin
          byte_in := Ord(tekst[i]); //pobranie kolejnej litery kodowanego tekstu i zamiana na bajt
          byte_pass := Ord(password[i mod len_pass]); //pobranie kolejnej litery klucza i zamiana na bajt
          if flag_code then //sprawdzenie flagi (czy ma być kodowanie czy dekodowanie)
              byte_out := (byte_in + byte_pass) mod 256 //zakodowanie bajtu tekstu bajtem klucza i podzielenie tego modulo przez 256
          else
              byte_out := (256 + (byte_in - byte_pass)) mod 256; //rozkodowanie bajtu tekstu zakodowanego bajtem klucza...
           tmp_str:= tmp_str + Chr(byte_out); //doklejenie roz/zakodowanego bajtu do zmiennej tymczasowej tmp_str (z zamianą zmiennej byte na char)
     end;
     result := tmp_str; //wyprowadzenie rezultatu funkcji
end;

A oto zakodowany tekst, kto rozkoduje?: ?ÔŢÜÉn¨?°ŐÔp?Î

Fakt, ale myślę, że jak któś chce łamać szyfry, to nie zajobi, że to może być taki banał :)

Zgodze sie z tobą Arturze ze to jest prosty klucz do zlamania. Moim celem było pokazanie jak można zakodowac tekst i ten artykł kieruje do początkujących programistów

Nie żebym się czepiał ale coś tu jest nie tak!

  • średniki ;
  • kod:=kod+char(key)-122) <-- albo o jeden nawias za dużo albo o jeden za mało, a poza tym "Incompatible types: 'String' and 'Integer'.
    Mi te błędy nie przeszkadzają początkującym programistom mogą przeszkadzać!

umieśc kod w tagach


Moim zdaniem kodowanie bardzo łatwe do złamania:) i do poważniejszych zastosowań się nie nadaje (sorki ale każdy kto się na tym zna powie ci to)