Java :: Aufgabe #34

6 Lösungen Lösungen öffentlich

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:

vote_ok
von cr055f1r3 (170 Punkte) - 02.06.2016 um 00:30 Uhr
Quellcode ausblenden Java-Code
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)); 
    
  } 
} 
  
vote_ok
von Bufkin (1410 Punkte) - 13.09.2017 um 11:48 Uhr
Entschlüsseln funktioniert im Moment nur mit kleinen Buchstaben und das richtige Wort muss aus eine Liste herausgesucht werden.

Quellcode ausblenden 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);
    }
}
vote_ok
von Bufkin (1410 Punkte) - 15.09.2017 um 08:29 Uhr
Version 2
- Entschlüsselung mit Großbuchstaben eingebaut

Quellcode ausblenden Java-Code
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);
    }
}
vote_ok
von nOrdan (1160 Punkte) - 05.06.2019 um 20:25 Uhr
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:

Quellcode ausblenden Java-Code


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:

Quellcode ausblenden Java-Code

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:

Quellcode ausblenden Java-Code

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);
    }

vote_ok
von paddlboot (3970 Punkte) - 09.07.2019 um 09:18 Uhr
Quellcode ausblenden Java-Code
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();
	}
}
vote_ok
von kollar (340 Punkte) - 10.12.2019 um 09:50 Uhr
Quellcode ausblenden Java-Code
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());

	}

}
2090715

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.