Last active
August 29, 2015 14:11
-
-
Save moopat/7a81ba2f22a537ac9b74 to your computer and use it in GitHub Desktop.
An example of how to create the Caesar Cipher of a text.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package at.swe01; | |
import java.io.BufferedReader; | |
import java.io.IOException; | |
import java.io.InputStreamReader; | |
public class CaesarCipher { | |
public static void main(String[] args) { | |
boolean hasValidString = false; | |
boolean hasValidShift = false; | |
String input = null; | |
int shift = 0; | |
while(!hasValidString){ | |
input = readString("Text der verschlüsselt werden soll: "); | |
if(input == null || input.length() < 1){ | |
System.out.println("(!) Die Zeichenkette muss mindestens ein Zeichen haben."); | |
} else { | |
hasValidString = true; | |
} | |
} | |
while(!hasValidShift){ | |
String shiftString = readString("Größe der Verschiebung: "); | |
try { | |
// Aus dem String wird ein Integer gemacht. | |
shift = Integer.valueOf(shiftString); | |
if(shift < -25 || shift > 25){ | |
System.out.println("(!) Du musst eine Zahl zwischen -25 und 25 eingeben."); | |
} else { | |
hasValidShift = true; | |
} | |
} catch (Exception e){ | |
System.out.println("(!) Du musst eine gültige Zahl eingeben."); | |
} | |
} | |
String output = encode(input, shift); | |
System.out.println(output); | |
} | |
/** | |
* Verschlüsst einen Text mit der Cäsar-Verschlüsselung. | |
* @param input Zu verschlüsselnder Text | |
* @param shift Größe der Zeichenverschiebung | |
* @return Verschlüsselter Text | |
*/ | |
public static String encode(String input, int shift){ | |
/* | |
* Negative Zahlen werden zu 26 dazuaddiert: | |
* Eine Verschiebung um -1 entspricht einer Verschiebung um 25. | |
*/ | |
if(shift < 0) shift = 26 + shift; | |
StringBuilder builder = new StringBuilder(); | |
// Die Eingabe wird in ein Array aus Großbuchstaben umgewandelt. | |
char[] inputChars = input.toUpperCase().toCharArray(); | |
for (char inputChar : inputChars) { | |
if(inputChar < 'A' || inputChar > 'Z'){ | |
// Zeichen die nicht zwischen A und Z liegen werden unverändert zurückgegeben. | |
builder.append(inputChar); | |
} else { | |
/* | |
* A wird bei der Verschiebung subtrahiert und danach wieder addiert, da A nicht den Wert 1 hat. | |
* Die Modulo-Operation wird benötigt, damit die Zahl des neuen Buchstabens nicht größer als 25 wird (und nach Z wieder A folgt). | |
*/ | |
char newChar = (char) ((inputChar + shift - 'A') % 26 + 'A'); | |
builder.append(newChar); | |
} | |
} | |
return builder.toString(); | |
} | |
/** | |
* Methode zum Lesen eines Strings aus der Kommandozeile. | |
* @param prompt Der vor der Eingabe anzuzeigende Text oder null. | |
* @return Eingegebener String | |
*/ | |
public static String readString(String prompt){ | |
if(prompt != null) { | |
System.out.println(prompt); | |
} | |
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | |
String input = null; | |
try { | |
input = br.readLine(); | |
} catch (IOException ioe) { | |
System.err.println("(!) Input kann nicht gelesen werden."); | |
System.exit(1); | |
} | |
return input; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment