# Caesar Verschlüsselung



## Dr. Java 00 (10. Mrz 2010)

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


----------



## AlexSpritze (10. Mrz 2010)

Hallo,



Dr. Java 00 hat gesagt.:


> Ich bitte euch um Hilfe.



bitte konkretisiere diese Hilfe, sonst wird dir hier niemand helfen


----------



## javafreak0202 (10. Mrz 2010)

vielleicht hilft euch das

http://kickundklick.fh-trier.de/Kryptographie/Kryptobilder/caesar-scheibe 01.gif


----------



## Dr. Java 00 (10. Mrz 2010)

Ich benötige das ganze Programm, da ich mich nicht wirklich auskenne.


----------



## holgar1221 (10. Mrz 2010)

DAS IS HILFREICH

Caesar - Symmetrische Verschlsselung


----------



## nrg (10. Mrz 2010)

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:

```
public interface Caesar {
	public final String crypt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	public String convert();
}
```
Klasse CaesarDecoder:

```
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:

```
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:

```
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


----------



## Tomate_Salat (10. Mrz 2010)

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


----------



## Dr. Java 00 (10. Mrz 2010)

Danke vielmals für eure Hilfe

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


----------



## Tomate_Salat (11. Mrz 2010)

Dr. Java 00 hat gesagt.:


> [...]kannte mich echt nicht aus



und auf diese weise wird das immer so bleiben. Wenn du iwelche Probleme hast, helfen wir gerne.
Aber zu posten: "programmiert das bitte für mich" , wird zumindest von mir (und ich denke auch von einigen anderen hier) nicht gerne in Bereichen außerhalb der Jobbörse gesehen.


----------



## Oldepieder (12. Mrz 2010)

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


```
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 (12. Mrz 2010)

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...


```
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 (13. Mrz 2010)

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)


----------



## Gastredner (15. Mrz 2010)

MQue hat gesagt.:


> 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.


----------

