Szyfr cezara

0

Nie wiem, czy dobrze rozumiem zasadę działania szyfru Cezara. Czy wystarczy tylko to (szyfrowanie):

for(int i=0; i<plaintext.length(); i++)
        std::cout <<  (char)(((int)plaintext[i])+3) << "\n";

i to:

for(int i=0; i<plaintext.length(); i++)
        std::cout <<  (char)(((int)ciphertext[i])-3) << "\n";

na deszyfrowanie? oczywiście najpierw zamieniam wszystkie na duże/małe litery

0

Wygląda ok; jedynie niepotrzebnie rzutujesz na int, bo afair char to w uproszczeniu także jest int i można na nim wykonywać takie same operacje.

0

Dziękuję, nie spodziewałem się, że to takie banalne :)

0

Ach, zapomniałem o jednym: jeżeli będziesz miał np.literę A, to zamieni Ci ją na > (bo cofnie o 3 znaki w tył w kodzie ASCII).
Jeżeli chcesz, aby zamieniło na X, będziesz musiał się nieco bardziej z tym 'pobawić' (np.poprzez dodanie tablicy czy ifa, który odpowiednio będzie sprawdzał, czy zakodowany znak nie jest mniejszy od A oraz czy odkodowany nie jest większy od Z).

0

Dodatkowo uwzględnił bym spacje, kropki etc, tekst to nie tylko litery. Co do postu wyżej to pasowało by też uwzględnić małe litery (mają inne kody ASCII)

0

Ludzi o czym wy gadacie nie będzie to działać bo ostatnie muszą się przenieść jako pierwsze.
(char)('A'+(plaintext[i]-'A'+key)%(26)) // kodowanie
(char)('A'+(plaintext[i]-'A'+26-key)%(26)) // dekodowanie

Ewentualnie wg rady od @sig, poniżej:
(char)(plaintext[i]+key-(plaintext[i]+key>'Z'?26:0));

0

Starczy dodać ifa i jak "Wychodzi poza zakres" to odjąć 'z'-'a'.

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