• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szyfr Cezara - błąd w dekrypcji szyfru

+1 głos
72 wizyt
pytanie zadane 1 marca w Java przez ptomeccc Użytkownik (670 p.)

Cześć, napisałem prosty program w Javie, którego zadaniem jest szyfrowanie i rozszyfrowywanie tekstu za pomocą szyfru cezara. O ile to pierwsze udało mi się bezbłędnie, to z rozszyfrowywaniem mam problem. Gdy algorytm cofnie się odpowiednio, natrafia na liczby ujemne i przez co nie otrzymuje prawidłowego wyniku, czy ma ktoś jakiś pomysł, jak mógłbym to zrobić inaczej, lepiej? Poniżej fragment kodu.

public static void decrypt(String text, int k) {
        char[] tAlf = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        char[] tChar = text.toCharArray();
        for (int i = 0; i < tChar.length; i++) {
            for (int j = 0; j < tAlf.length; j++) {
                if (text.charAt(i) == tAlf[j]) {
                    System.out.print(tAlf[(Math.abs(j-k)) % 26]);
                }
            }
        }
    }

 

komentarz 2 marca przez mokrowski VIP (148,220 p.)
Ciekawe czy w Muzeum Inżynierii Miejskiej w Krakowie, poprawili już przykład z algorytmem Cezara :) Tam także była/jest błędna implementacja :)

1 odpowiedź

+3 głosów
odpowiedź 2 marca przez Whiskey_Taster Stary wyjadacz (13,620 p.)
wybrane 2 marca przez ptomeccc
 
Najlepsza
Całkiem prawdopodobne, że problem masz z wartością bezwzględną. Jest ona niepotrzebna, w zasadzie to psuje. Weźmy przypuśćmy, że dostajesz jako wynik -2. Wartość bezwzględna to oczywiście 2. Liczymy: 2 mod 26 = 2, -2 mod 26 = 24. Tak więc widzisz, że dostałeś całkiem co innego.

Poza tym, taka mała rada: jeśli masz dobrze napisany szyfrowanie, to odszyfrować można podając liczbę przeciwną do klucza, wprost do funkcji szyfrującej. Więc jeśli zaszyfrujesz z kluczem 5, to wystarczy do funkcji szyfrującej przekazać -5, by odszyfrować wiadomość. Zwykła matematyka :)

Podobne pytania

0 głosów
1 odpowiedź 164 wizyt
0 głosów
1 odpowiedź 174 wizyt
pytanie zadane 18 grudnia 2020 w PHP przez aart Nowicjusz (150 p.)
0 głosów
0 odpowiedzi 136 wizyt
pytanie zadane 25 listopada 2019 w C i C++ przez juske00 Początkujący (370 p.)

88,328 zapytań

136,921 odpowiedzi

305,575 komentarzy

58,599 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...