Szyfrowanie/deszyfrowanie tekstu

0

Mam tu takie zadanie, którego celem jest zaszyfrowanie tekstu. Chcę dodać jeszcze deszyfrowanie tylko nic nie przychodzi mi do głowy. Pomysły ??
Przy okazji przyjmę na klatę uwagi odnośnie poniższego kodu. Zaznaczę jednak, że jestem na poziomie tablic, napisów, plików i wyrażeń regularnych i na tym mam na razie pozostać.

Zad 4
Pobieraj od użytkownika napis dopóki nie będzie składał się z samych
dużych liter alfabetu łacińskiego. Napis szyfrujemy według
następującego algorytmu: do każdej litery napisu dodaj cyfrę jedności
kodu ASCII tej litery. Jeżeli po dodaniu otrzymany kod okaże się
większy od kodu litery Z należy rozpocząć zliczanie od litery A.
Przykładowo kod litery K wynosi 75, czyli należy do niego dodać liczbę
5 (cyfra jedności liczby 75) i w ten sposób otr,mzymamy kod 80, czyli
literę P. Kod litery W wynosi 87, czyli należy do niego dodać liczbę
7 (cyfra jedności liczby 87) i w ten sposób otrzymamy kod 94, który
przekroczy kod liczby Z, czyli 90. W takiej sytuacji należy po
osiągnięciu litery Z rozpocząć liczenie od znaku A. Po odjęciu 94 od
90 otrzymamy 4, czyli trzeba przesunąć się począwszy od litery A o 4
pozycje. Wynikiem takiego kodowania będzie litera D. Otrzymany w ten
sposób zakodowany napis zapisz do pliku tekstowego zakodowany.txt.
 */


import jdk.swing.interop.SwingInterOpUtils;

import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.Scanner;

public class Zad6 {

    static String getString() {

        Scanner sc = new Scanner(System.in);
        String txt;

        do {
            System.out.println("Podaj txt");
            txt = sc.nextLine();
        } while (!txt.matches("[A-Z]+"));

        return txt;

    }

    static String encryption(String txt) {

        char[] charArr = txt.toCharArray();
        StringBuilder sb = new StringBuilder();
        int newAascii;
        int positionsNumber = 0;

        for (int i = 0; i < charArr.length; i++) {
            newAascii = changeASCII(charArr[i]);
            if (newAascii < 90) {
                sb.append((char) newAascii);
            } else {
                positionsNumber = newAascii - 90;
                newAascii = Integer.valueOf('A') + positionsNumber - 1;
                sb.append((char) newAascii);
            }
        }
        String txt1 = new String(sb);
        return txt1;
    }

    static void saveToFile(String txt) {
        try (
                FileWriter fileWriter = new FileWriter("zakodowany")) {
            PrintWriter printWriter = new PrintWriter(fileWriter);

            printWriter.println(txt);

        } catch (Exception e) {
            throw new IllegalArgumentException("err");
        }
    }

        static int changeASCII ( char x){
            return x + x % 10;
        }


    public static void main(String[] args) {

        String txt = getString();
        String encodedTxt = encryption(txt);
        saveToFile(encodedTxt);
    }
}

0

Niedasie.
To nie jest odwracalny szyfr. Przykładowo dla liter A i F otrzymasz identyczny zakodowany znak. Jak później odróżnisz z jakiej litery powstał?

0

Nie wydaje mi się żebyś znalazł funkcję deszyfrującą, bo funkcja szyfrująca nie jest odwracalna (więcej niż jedna litera może być mapowana na to samo)

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