# Kryptographie



## Lisa:) (30. Apr 2011)

Hey Ihr alle!!
wir haben als Aufgabe bekommen in kleinen Gruppen ein Kryptosystem mit RSA zu entwickeln. Dafür haben wir die Caesar Verschlüsselung (Buchstaben um eine bestimmte Stelle im Alphabet verschieben) und das Rückwertsschreben uns angesehen. 
unsere Idee ist folgende:  Aufgabe -> uA gf ba e -> euAbagf -> Caeserverschlüsselung

Meine Frage ist jetzt: Wie bekomme ich es hin, dass ich immer nur zwei Buchstaben miteinander vertausche??

BBBIIITTTTTTEEE möglichst schnell antworten!!   DDDAAANNNKKKEEE!!!


----------



## Cola_Colin (30. Apr 2011)

Indem du das ganze mit einem StringBuilder neu zusammenbaust.

Was hat das aber mit RSA zu tun ?


----------



## Noctarius (30. Apr 2011)

Cola_Colin hat gesagt.:


> Was hat das aber mit RSA zu tun ?



Nichts


----------



## Lisa:) (2. Mai 2011)

Und wie mache ich das mit dem StringBuilder?? Welchen der Möglichkeiten rauche ich eigentlich für mein Problem?????:L
Sorry hab leider noch nicht so viel ahnung


----------



## socialcocer (2. Mai 2011)

Wie bereits gesagt, gibt es zum Einen den StringBuilder, zum Andererm könntest du dir ein char-Array holen und dann einfach mit einer for-schleife drüber laufen, oder oder...
Möglichkeiten gibt es da wirklich genügend. Such dir einen für dich verständlichen/ersichtlichen Lösungsweg heraus


----------



## Gast2 (2. Mai 2011)

Weil mir grade langweilig war...


```
public static String reverse(String str){
		StringBuilder sb = new StringBuilder(str.length());
		for(int i = 0; i < str.length(); i += 2){
			int end = (i+2 < str.length()) ? i+2 : i+1;
			sb.append(new StringBuilder(str.substring(i,end)).reverse().toString());
		}
		return sb.toString();
	}
```


----------



## Andi_CH (3. Mai 2011)

Ist noch schade, dass ein Zeichen verschluckt wird, aber sonst ist das beinahe so gut wie RSA 

"Hans Muster <hans@muster.de>";
"aHsnM suet rh<na@sumtsred.e"

Egal etwas muss der TO ja auch noch zu tun haben 

Ach übrigens 





Lisa:) hat gesagt.:


> Welchen der Möglichkeiten rauche ich ...


 rauchen? ;-)


----------



## Lisa:) (3. Mai 2011)

ok danke an alle aber ich bin echt ein voll Fosten !! ich kriegs trotz eurer Hilfe nicht auf die reihe;(
Vielleicht könnt ihr mir ja in meinem code weiterhelfen??


```
public String verschluessle(String eingabe, int schl) {
     String ausgabe = "";
    for(int a = eingabe.length() - 1; a >= 0; a--) {

      char buchstabe = eingabe.charAt(a);
      int zahl = (int) buchstabe;
      zahl = zahl +  schl;
      if (zahl > 126){
        zahl = zahl - 95;
      }
      char buchstabe2 = (char)zahl;
      ausgabe = ausgabe + buchstabe2;
     }

     return ausgabe;
   }
```

das ist mein code zum verschlüsseln bis jetztund ich weiß echt nicht wie ich weiter machen soll

ps: rauche tut mir leit sollte brauche werden


----------



## Andi_CH (4. Mai 2011)

Glaub es endlich - noch mehr Lösung als du hier schon hast wird dir (hoffentlich!) niemand präsentieren!
Du sollst ja was lernen.
Ausserdem ist nicht klar was du willst. Was dein (ist es überhautp deiner?) Code machen soll auch nicht so wirklich da du weder beschreibst was er tun soll noch wo deiner Meinung nach ein Fehler ist.


----------



## uAgfbae (4. Mai 2011)

so kenne ich die Verschiebechiffre nicht, aber grundsätzlich zwei dinge werden von dir beschrieben:


```
/*        System.out.println(swap2(cipher(cipher(swap2("Hallo"), 5), -5))); */

    public static String swap2(String str) {
        char[] value = str.toCharArray();
        for (int i = 0; i < value.length - 1; i += 2) {
            char c = value[i];
            value[i] = value[i + 1];
            value[i + 1] = c;
        }
        return new String(value);
    }

    public static String cipher(String str, int c) {
        char[] value = str.toCharArray();
        for (int i = 0; i < value.length; i++) {
            value[i] += c;
        }
        return new String(value);
    }
```


----------



## uAgfbae (4. Mai 2011)

```
public static String cipher(String str, int cnt) {
        char[] value = str.toCharArray();
        for (int i = 0; i < value.length; i++) {
            value[i] += cnt;
        }
        return new String(value);
    }
```

irgendwie wundere ich mich gerade, dass er in zeile 4 nicht possible loss of precision anzeigt. anscheinend wir zweimal implizit konvertiert: char -> int und int -> char. und wegen der "zweierkomplementivität" gibt es damit auch keine probleme oder? wer weiß das?


----------



## Andi_CH (4. Mai 2011)

Siehe auch hier. Da wird gerade über dasselbe philosophiert.


```
char c = 'a';
        c += 1;
        c = c + 1;
```
Zeile 2 ok
Zeile 3 Fehler


----------

