ich versuche Algorithmus zu finden wie man Wort entschlüsseln kann. Ich habe versucht in die Hälfte zu teilen und in Zwei Strings zu speichern, aber irgendwie geht es nicht. Könnt ihr eine kleine Idee schreiben, damit ich Anhaltspunkt habe?
Gibt es bessere Lösung wie man durch Komandozeile char eingibt? für String , int und double ist Scanner optimal oder?
public class Gartenzaun {
public static void main(String[] args) {
String text;
String frage;
Scanner sc = new Scanner(System.in);
System.out.println("wollen Sie verschluesseln ? j/n");
frage = sc.next();
if (frage.charAt(0) == 'j') {
System.out.println("Geben sie Text ein");
text = sc.next();
for (int i = 0; i < text.length(); i = i + 2) {
System.out.print(text.charAt(i));
}
for (int i = 1; i < text.length(); i = i + 2) {
System.out.print(text.charAt(i));
}
} else {
}
String geheimText = "greatn";
}
}
public static void main(String[] args) {
String text;
String frage;
Scanner sc = new Scanner(System.in);
System.out.println("wollen Sie verschluesseln ? j/n");
frage = sc.next();
if (frage.charAt(0) == 'j') {
System.out.println("Geben sie Text ein");
text = sc.next();
for (int i = 0; i < text.length(); i = i + 2) {
System.out.print(text.charAt(i));
}
for (int i = 1; i < text.length(); i = i + 2) {
System.out.print(text.charAt(i));
}
} else {
System.out.println("Geben sie Text ein");
text = sc.next();
int schritt =0;
if(text.length()%2 == 0){
for(int i = 0; i < text.length()/2; i++){
schritt = text.length()/2;
System.out.print(text.charAt(i));
System.out.print(text.charAt(i+ schritt));
}
}else{
for(int i = 0; i < text.length()/2; i++){
schritt = text.length()/2 +1;
System.out.print(text.charAt(i));
System.out.print(text.charAt(i+schritt));
}
System.out.println(text.charAt(text.length()/2));
}
}
}
}
Eine ähnliche Antwort wollte auch ich geben, nur hätte ich es anders formuliert.
@TO
Wie @CyborgBeta schon richtig gesagt hat hast du keine Verschlüsselung, und streng genommen auch noch nicht mal eine monoalphabetische Substitution, sondern führst lediglich eine Neuordnung eines Buchstaben-Arrays durch. Wobei, eigentlich immer noch nciht korrekt. Ganz korrekt wäre eigentlich folgende Aussage : dein Code hat die Aufgabe bei einem “plain” Input erst jeden %2==0 Buchstaben auszugeben und dann jeden %2==1, sowie bei einem “crypto” Input das umgekehrte Verfahren anzuwenden in dem abwechseln die Buchstaben aus dem ersten und dem zweiten Teil des Wortes ausgegeben werden.
Schon alleine der Fakt das dein Code sein Ergebnis gleich erstmal direkt auf den OUT schreibt statt ihn sinnvoll in einer Methode gekapselt als return zu liefern widerstrebt allem was irgendwie mit “Verschlüsselung” zu tun haben könnte.
Fang also erstmal als ersten Schritt damit an deinen Code so umzubauen das er anstatt direkt die Ausgaben zu tätigen das Ergebnis als return liefert. Ein Ansatz ist ja da, aber void haut nicht hin. Als return wäre byte[] oder String geeignet.
Dann solltest du dir noch mal den verlinkten Wiki-Artikel durchlesen : eine “Verschlüsselung” ist immer eine mindestens monoalphabetische (besser natürlich polyalphabetisch) Substitution oder, wie im Fall von RSA, eine diskrete mathematische Falltür-Funktion. Zusätzlich wird für die eigentliche Berechnung noch ein zusätzlicher Wert genutzt : der Schlüssel. Dein Code weist keins von beiden auf und ist somit auch per Definition keine Form einer “Verschlüsselung”.
Fang mit was einfachem wie Cäsar oder ROT13 an, also einer simplen monoalphabetischen Substition die man auch noch im Kopf oder mit Stift auf Zettel (kann man eigentlich mit allen, nur wird es bei manchen schon sehr aufwändig) lösen kann.
Was du auch beachten solltest : in der Kryptographie gibt es ein absolutes NO-GO : Security through Obscurity > Sicherheit durch Unwissenheit. Damit ist natürlich nicht die Geheimhaltung von Schlüsseln gemeint sondern die Krypto-Verfahren an sich selbst.
Einfacher erklärt : die Sicherheit darf nicht auf Unkenntnis des Algorithmus basieren.
Um es auf deinen Code anzuwenden : die Sicherheit deines Codes basiert darauf das der Verwürfel-Algorithmus unbekannt ist, also niemand weis nach welchem Schema die Buchstaben verstauscht wurden.
Ich weis, klingt jetzt alles n bisschen krass, aber wenn du schon das Wort Verschlüsselung in den Mund nimmst solltest du auch wissen wo von du redest.