Caesar Verschlüsselung

D

Dr. Java 00

Gast
Hallo,

Ich habe folgendes Problem:
Ich muss für die Schule eine Caesar Verschlüsselung schreiben. Ich verwende NetBeans 6.5.1. und es muss mit GUI sein.

Hier die Angabe:
Man soll eingeben können wie oft man verschieben möchte, außerdem soll das Programm Ver- und Entschlüsseln können.

Ich bitte euch um Hilfe.

Danke im Voraus
 

nrg

Top Contributor
obwohl dus eigentlich nicht verdient hast aber mir grad langweilig war habe ich mal den algo gemacht. ist sehr simpel gehalten. akzeptiert wie in den o.g. links nur Großbuchstaben. Wenn er was nicht kennt gibt er " " zurück (so auch bei space).

Interface Caesar:
Java:
public interface Caesar {
	public final String crypt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	public String convert();
}
Klasse CaesarDecoder:
Java:
public class CaesarDecoder implements Caesar {
	
	private String code;
	
	public CaesarDecoder(String code) {
		this.code = code;
	}
	
	@Override
	public String convert() {
		StringBuilder sb = new StringBuilder(code.length());
		for (int i = 0; i < code.length(); i++) {
			int pos = crypt.indexOf(code.charAt(i));
			if (pos == -1) 
				sb.append(" ");
			else
				sb.append(crypt.charAt((pos-3+26)%26));
		}
		return sb.toString();
	}
	
}
Klasse CaesarEncoder:
Java:
public class CaesarEncoder implements Caesar {

	private String code;

	public CaesarEncoder(String code) {
		this.code = code;
	}
	
	@Override
	public String convert() {
		StringBuilder sb = new StringBuilder(code.length());
		for (int i = 0; i < code.length(); i++) {
			int pos = crypt.indexOf(code.charAt(i));
			if (pos == -1) 
				sb.append(" ");
			else
				sb.append(crypt.charAt((pos+3)%26));
		}
		return sb.toString();
	}
}
Klasse Test:
Java:
public class Test {
	public static void main(String[] args) {
		String test = new CaesarEncoder("HALLO DAS IST EIN TEST").convert();
		System.out.println(test);
		System.out.println(new CaesarDecoder(test).convert());
	}
}

gui kannste dann ja selber machen :). kannst es auch alles in eine Klasse stopfen, fands nur aus oo sicht so schöner
 
Zuletzt bearbeitet:
T

Tomate_Salat

Gast
schon dreist, ich hätts ihm nicht geschrieben. In Zukunft wende dich bitte an die JobBörse hier im Forum wenn du Aufträge verteilst
 
D

Dr. Java 00

Gast
Danke vielmals für eure Hilfe

tut mir leid wollte nicht dreist rüberkommen kannte mich echt nicht aus
 
O

Oldepieder

Gast
Gegen die Lehrer müssen wir doch zusammenhalten hier ne perfekte Lösung für Ceasar ;)

Java:
class Caesar

  // Anfang Attribute
  // Ende Attribute

{

  // Anfang Methoden
  public static String caesar (String quelle, int verschiebung) {
   //von hier
  quelle = quelle.toUpperCase();
  //bis hier was hinzugefügt
   int laenge = quelle.length();
   String ergebnis="";
   for (int i=0; i<laenge; i++) {
     char buchst = quelle.charAt(i);
     ergebnis = ergebnis + charCaesar(buchst, verschiebung);
   }
   return ergebnis;
 }

 private static char charCaesar(char buchst, int verschiebung) {
   String alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ";


   if(buchst==' ')        //Leerzeichen bleibt gleich
   {
    return ' ';
   }

   int pos = alphabet.indexOf(buchst);
   int endPos = (pos + verschiebung) % 26;
   return alphabet.charAt(endPos);
 }


 public static String deCaesar (String code, int verschiebung) {
  return caesar(code, 26-verschiebung);
 }
  // Ende Methoden
}
 

nrg

Top Contributor
naja oldepieter. da lässt sich drüber streiten :). hab jetzt keine variable verschiebung implementiert aber das wär dann eben eine instanzvariable mehr.

nrg hat gesagt.:
kannst es auch alles in eine Klasse stopfen, fands nur aus oo sicht so schöner
aber wenn man es in eine klasse klopft, geht das schöner...

Java:
public class Caesar {
	
	private static final String CRYPT = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
    public static String caesar(String code, int verschiebung) {
        StringBuilder sb = new StringBuilder(code.length());
        for (int i = 0; i < code.length(); i++) {
            int pos = CRYPT.indexOf(code.charAt(i));
            if (pos == -1) 
                sb.append(" ");
            else
                sb.append(CRYPT.charAt((pos+verschiebung)%26));
        }
        return sb.toString();
    }
    public static String deCaesar(String code, int verschiebung) {
    	return caesar(code, 26-verschiebung);
    }
}
 

MQue

Top Contributor
Interessant zu diesem Beispiel ist noch dieses Programm, das auch Erklärungen zu der Cesar- verschlüsselung beinhaltet:
CrypTool - Educational Tool for Cryptography and Cryptanalysis

Einfach downloaden und ausprobieren, zahl sich aus, den Caeser Code haben übrigends die Römer schon geknackt, ich würde es sinnvoller finden wenn man SHA arithmetik lernen würde, Zeichen vershcieben ist nach kein problem in beiden Seiten (ver- entschlüsseln)
 
G

Gastredner

Gast
ich würde es sinnvoller finden wenn man SHA arithmetik lernen würde, Zeichen vershcieben ist nach kein problem in beiden Seiten (ver- entschlüsseln)
SHA? Der Threadstarter sitzt wohl, so wie ich das verstehe, in irgendeinem Informatik-GK/-LK in der Oberstufe (wenn überhaupt) einer Schule, in dem gerade Grundlagen behandelt werden - da ist Caeser vermutlich sinnvoller, da es ja wohl eher um eben jene Grundlagen geht: Stringmanipulation, Modulo-Operator.
Das hatten wir damals in unserer Schule auch gemacht, wenn auch mit Delphi.
 


Schreibe deine Antwort... und nutze den </> Button, wenn du Code posten möchtest...

Neue Themen


Oben