Java :: Aufgabe #34
6 Lösungen

Mit Caesar Chiffre ent- und verschlüsseln
Anfänger - Java
von Dome
- 03.01.2013 um 01:30 Uhr
Schreiben Sie ein Programm, indem Sie mit Hilfe der Caesar Chiffre einen beliebigen Text ent- und verschlüsseln können. Zuvor muss der Text und die Anzahl der Verschiebung angegeben werden. Groß- und Kleinschreibung muss nicht beachtet werden.
Konsolenausgabe:
Geben Sie den Text ein: Beispielwort
Um wie viele Stellen soll verschoben werden: 1
Ergebnis: Cfjtqjfmxpsu
Lösungen:

public class caesar { static String verschiebung(String text,int verschiebung){ int Swap; String endstring = ""; for (int i = 0;i< text.length() ;i++ ) { Swap = (int)text.charAt(i); Swap = Swap + verschiebung; endstring = endstring + (char)Swap; } return endstring; } public static void main(String[] args) { String text = InOut.readString("Text zur Verschlüsselung eingeben\n"); int verschiebung = InOut.readInt("Anzahl der Verschiebung\n"); System.out.println(verschiebung(text,verschiebung)); } }
Entschlüsseln funktioniert im Moment nur mit kleinen Buchstaben und das richtige Wort muss aus eine Liste herausgesucht werden.
Java-Code

import java.util.ArrayList; import java.io.*; class caesar { static String alphabetVerschlüsseln = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; static String alphabetEntschlüsseln = "abcdefghijklmnopqrstuvwxyz"; public static String verschlüsseln(int verschiebung, String text) { int index = 0; String ausgabe = ""; for(int i = 0; i < text.length(); i++) { index = alphabetVerschlüsseln.indexOf(text.charAt(i)); ausgabe = ausgabe.concat(String.valueOf(alphabetVerschlüsseln.charAt(index + verschiebung))); } return ausgabe; } public static String entschlüsseln(String text) { String ausgabe = ""; int index = 0; int verschiebung = 0; ArrayList<String> ausgabeArray = new ArrayList<String>(); for(int i = 0; i < 26; i++) { for(int j = 0; j < text.length(); j++) { index = alphabetEntschlüsseln.indexOf(text.charAt(j)); if((index + i) > 25) { verschiebung = index + i - 26; } else { verschiebung = index + i; } ausgabe = ausgabe.concat(String.valueOf(alphabetEntschlüsseln.charAt(verschiebung))); } ausgabeArray.add(ausgabe); System.out.println(ausgabeArray.get(i)); ausgabe = ""; } return ausgabeArray.toString(); } public static void main (String[] args) throws java.lang.Exception { String StrVerschlüsseln = "Beispielwort"; String StrEntschlüsseln = "qtxhextaldgi"; System.out.println(StrVerschlüsseln + " verschlüsselt ist:\n" + verschlüsseln(1, StrVerschlüsseln) + "\n"); System.out.println("Alle möglichen Verschiebungen von " + StrEntschlüsseln + ":\n"); entschlüsseln(StrEntschlüsseln); } }
Version 2
- Entschlüsselung mit Großbuchstaben eingebaut
Java-Code
- Entschlüsselung mit Großbuchstaben eingebaut

import java.util.ArrayList; import java.lang.Character; class caesar { final static String alphabetBeides = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; final static String alphabetGross = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; final static String alphabetKlein = "abcdefghijklmnopqrstuvwxyz"; static String alphabet = ""; public static String verschlüsseln(int verschiebung, String text) { int index = 0; String ausgabe = ""; for(int i = 0; i < text.length(); i++) { index = alphabetBeides.indexOf(text.charAt(i)); ausgabe = ausgabe.concat(String.valueOf(alphabetBeides.charAt(index + verschiebung))); } return ausgabe; } public static String entschlüsseln(String text) { String ausgabe = ""; int index = 0; int verschiebung = 0; ArrayList<String> ausgabeArray = new ArrayList<String>(); for(int i = 0; i < 26; i++) { for(int j = 0; j < text.length(); j++) { if(text.charAt(j) == Character.toLowerCase(text.charAt(j))) { alphabet = alphabetKlein; index = alphabetKlein.indexOf(text.charAt(j)); } else { alphabet = alphabetGross; index = alphabetGross.indexOf(text.charAt(j)); } if((index + i) > 25) { verschiebung = index + i - 26; } else { verschiebung = index + i; } ausgabe = ausgabe.concat(String.valueOf(alphabet.charAt(verschiebung))); } ausgabeArray.add(ausgabe); System.out.println(i + ": " + ausgabeArray.get(i)); ausgabe = ""; } return ausgabeArray.toString(); } public static void main (String[] args) throws java.lang.Exception { String StrVerschlüsseln = "Beispielwort"; String StrEntschlüsseln = "Cfjtqjfmxpsu"; System.out.println(StrVerschlüsseln + " verschlüsselt ist:\n" + verschlüsseln(1, StrVerschlüsseln) + "\n"); System.out.println("Alle möglichen Verschiebungen von " + StrEntschlüsseln + ":\n"); entschlüsseln(StrEntschlüsseln); } }
Anmerkung: Die Programmierung kann noch verbessert werden durch z.B eine GUI zur Auswahl, aber ich habe mich vorerst auf das nötigste beschränkt
Zuerst Verschlüsseln:
Java-Code
Entschlüsseln:
Java-Code
Die Methoden die ich aus meinem eigenem Methodensammlung package benutzt habe:
Java-Code
Zuerst Verschlüsseln:

import Methodensammlung.Methoden; /** * Ein Text wird mithilfe des Caesar Chiffres verschlüsselt * * @author (nOrdan) * @version (05.06.2019) */ public class Verschlüsseln { Methoden m = new Methoden(); public Verschlüsseln() { inputs(); } private void inputs() { boolean valid1 = false; int verschiebung = 0; String text = null; while (valid1 == false) { text = m.userInput("Geben sie ihren Text zum Verschlüsseln ein"); m.errorStringInput(text); text = text.toUpperCase(); valid1 = true; } valid1 = false; while (valid1 == false) { String input1 = m.userInput("Geben sie die gewünschte Verschiebung ein"); m.errorIntInput(input1); try { verschiebung = m.parseInt(input1); if (verschiebung > 26) { m.errorMessage("Ihr Wert ist größer als die größte mögliche Verschiebung","Size busy"); continue; } else { valid1 = true; } } catch(Exception e) { m.errorMessage("Invalid user input","Invalid input"); } } verschlüsseln(text,verschiebung); } private void verschlüsseln(String text, int verschiebung) { String ergebnis = ""; int change; for (int i = 0; i < text.length(); i++) { if (text.charAt(i) == ' ') { } else { if (text.charAt(i) >= 65 && text.charAt(i) <= 90) { change = (int)text.charAt(i) + verschiebung; if (change > 90) { change -= 26; ergebnis += (char)change; } else { ergebnis += (char)change; } } else { } } } m.informationMessage("Ihr verschlüsselter Text lautet " + ergebnis + ". Außerdem wurden Leerzeichen,Zahlen und Sonderzeichen entfernt und alle Buchstaben wurden groß geschrieben, damit die alte römische Schreibweise erhalten bleibt!" ,"Ergebnis"); } }
Entschlüsseln:

import Methodensammlung.Methoden; /** * Entschlüsseln eines mit Caesar Chiffre verschlüsseltem Text mit der Hilfe der BrutForce Methode (alle 25 Verschiebungen werden probiert) * * @author (nOrdan) * @version (05.06.2019) */ public class Entschlüsseln { Methoden m = new Methoden(); public Entschlüsseln() { inputs(); } private void inputs() { boolean valid1 = false; String text = null; while (valid1 == false) { text = m.userInput("Geben sie den zu entschlüsselnden Text ein"); m.errorStringInput(text); text = text.toUpperCase(); valid1 = true; } entschlüsseln(text); } private void entschlüsseln(String text) { int change = 0; String ergebnis = ""; for (int i = 1; i < 26; i++) { for (int y = 0; y < text.length(); y++) { if (text.charAt(y) == ' ') { } else { if (text.charAt(y) >= 65 && text.charAt(y) <= 90) { change = (int)text.charAt(y) - i; if (change < 65) { change += 26; ergebnis += (char)change; } else { ergebnis += (char)change; } } else { } } } m.informationMessage("Mit der Verschiebung um " + i + ":" + ergebnis,"Entschlüsselt"); ergebnis = ""; } } }
Die Methoden die ich aus meinem eigenem Methodensammlung package benutzt habe:

public String userInput(String message) { return JOptionPane.showInputDialog(message); } public int parseInt(String input) { return Integer.parseInt(input); } public void errorIntInput(String input) { if (input == null) { System.exit(0); //Drückt der User auf abbrechen wird null zurück gegeben und das Programm wird beendet } else if (input.isEmpty() == true) { //continue; wenn nötig } } public void errorStringInput(String input) { if (input == null) { System.exit(0); //Drückt der User auf abbrechen wird null zurück gegeben und das Programm wird beendet } else if (input.isEmpty() == true) { informationMessage("Da sie nichts eingegeben haben wird auch nichts ausgegeben","No input"); System.exit(0); } public void errorMessage(String message,String errorName) { JOptionPane.showMessageDialog(null,message,errorName,JOptionPane.ERROR_MESSAGE); } public void informationMessage(String message,String informationName) { JOptionPane.showMessageDialog(null,message,informationName,JOptionPane.INFORMATION_MESSAGE); }

import java.util.*; public class CaesarChiffre { public static void main (String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Geben Sie den Text ein:\t"); String text = scanner.next(); text = text.toLowerCase(); System.out.print("Um wie viele Stellen soll verschoben werden:\t"); int anzahl = scanner.nextInt(); System.out.print("Ergebnis:\t"); for(int i = 0; i < text.length(); i++) { int var = text.charAt(i); if((text.charAt(i) == 122) || ((text.charAt(i) + anzahl) > 122)) { var -= 26; } System.out.print((char) (var + anzahl)); } scanner.close(); } }

import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; public class CeasarChiffre { public static void main(String args[]) { FrCeasar frCeasar = new FrCeasar("Ceasar Ziffer"); } } class FrCeasar extends JFrame implements ActionListener { JPanel pEingabe = new JPanel(); JLabel lbEingabe = new JLabel("Geben Sie den Text ein: "); JTextField tfEingabe = new JTextField(20); JPanel pZahl = new JPanel(); JLabel lbZahl = new JLabel("Geben Sie eine Zahl ein: "); JTextField tfZahl = new JTextField(20); JPanel pButton = new JPanel(); JButton bButton = new JButton("Verschlüsseln"); JPanel pAusgabe = new JPanel(); JLabel lbAusgabe = new JLabel("Ergebnis: "); JTextField tfAusgabe = new JTextField(20); FrCeasar(String titel) { super(titel); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(440, 300); setLocation(1000, 300); setLayout(new FlowLayout(FlowLayout.RIGHT, 20, 20)); tfAusgabe.setEditable(false); pEingabe.add(lbEingabe); pEingabe.add(tfEingabe); pZahl.add(lbZahl); pZahl.add(tfZahl); pButton.add(bButton); pAusgabe.add(lbAusgabe); pAusgabe.add(tfAusgabe); add(pEingabe); add(pZahl); add(pButton); add(pAusgabe); bButton.addActionListener(this); tfEingabe.addActionListener(this); tfZahl.addActionListener(this); } public void berechneCeasar(String stEingabetext, String stEingabeZahl) { try { int eingabeZahl = Integer.parseInt(stEingabeZahl); char[] arrayABC = new char[26]; char[] arrayabc = new char[26]; StringBuilder sbAusgabe = new StringBuilder(); char tempZiffer; char addZiffer; for (int i = 0; i <= 25; i++) { arrayABC[i] = (char) (i + 65); arrayabc[i] = (char) (i + 97); } for (int i = 0; i < stEingabetext.length(); i++) { tempZiffer = stEingabetext.charAt(i); for (int j = 0; j < arrayABC.length; j++) { if (arrayABC[j] == tempZiffer) { if (eingabeZahl + j > 25) { addZiffer = arrayABC[eingabeZahl + j - 26]; } else { addZiffer = arrayABC[eingabeZahl + j]; } sbAusgabe.append(addZiffer); } } for (int j = 0; j < arrayabc.length; j++) { if (arrayabc[j] == tempZiffer) { if (eingabeZahl + j > 25) { addZiffer = arrayabc[eingabeZahl + j - 26]; } else { addZiffer = arrayabc[eingabeZahl + j]; } sbAusgabe.append(addZiffer); } } if (tempZiffer == ' ') { sbAusgabe.append(' '); } } tfAusgabe.setText(sbAusgabe.toString()); } catch (NumberFormatException e) { tfAusgabe.setText("Bitte Ganzzahl eingeben!"); } } @Override public void actionPerformed(ActionEvent evt) { berechneCeasar(tfEingabe.getText(), tfZahl.getText()); } }