/**
  *
  * Beschreibung
  *
  * @version 1.1 vom 28.09.2007
  * @author
  */

public class CaesarWS {

  public static void main(String[] args) {
    String Text = "Die Caesar-Verschlüsselung ist ein besonders einfacher Sonderfall einer \n";
    Text = Text + "einfachen monoalphabetischen Substitution. Zum Zwecke der Verschlüsselung wird\n";
    Text = Text + "dabei jeder Buchstabe des lateinischen Standardalphabets um eine bestimmte \n";
    Text = Text + "Anzahl von Positionen zyklisch verschoben (rotiert). Die Anzahl bestimmt \n";
    Text = Text + "den Schlüssel, der für die gesamte Verschlüsselung unverändert bleibt. \n";
    Text = Text + "Es ist eine der einfachsten (und unsichersten) Formen einer Geheimschrift.\n";
    //Text = Text + " \n";
    String Krypto = "Jok Igkygx-Bkxyinrüyykratm oyz kot hkyutjkxy kotlginkx Yutjkxlgrr kotkx \n";
    Krypto = Krypto + "kotlginkt sutugrvnghkzoyinkt Yahyzozazout. Fas Fckiqk jkx Bkxyinrüyykratm coxj \n";
    Krypto = Krypto + "jghko pkjkx Hainyzghk jky rgzkotoyinkt Yzgtjgxjgrvnghkzy as kotk hkyzosszk \n";
    Krypto = Krypto + "Gtfgnr but Vuyozoutkt feqroyin bkxyinuhkt (xuzokxz). Jok Gtfgnr hkyzossz \n";
    Krypto = Krypto + "jkt Yinrüyykr, jkx lüx jok mkygszk Bkxyinrüyykratm atbkxätjkxz hrkohz. \n";
    Krypto = Krypto + "Ky oyz kotk jkx kotlginyzkt (atj atyoinkxyzkt) Luxskt kotkx Mknkosyinxolz. \n";
    //Krypto = Krypto + " \n";


    encrypt( Text,6 );
    System.out.println( );
    decrypt( Krypto,6);
  }  // eof main
  
  public static void encrypt(String text, int n)
  {
   System.out.println( text );
   //System.out.println( n );

   int aInt = (int) 'a';
   int zInt = (int) 'z';
   int AInt = (int) 'A';
   int ZInt = (int) 'Z';
   int dis;
   /*
   System.out.println( aInt );
   System.out.println( zInt );
   System.out.println( AInt );
   System.out.println( ZInt );
   */
   int laenge = text.length() - 1;
   for (int i = 0; i <= laenge; i++)
   {
          char zeichen = text.charAt(i);
          int konvert = (int) zeichen;
          if ((aInt <= konvert) && (konvert <= zInt)){
                    konvert = konvert + n;
                    if (konvert > zInt){
                      dis = konvert - zInt;
                      konvert = aInt + dis - 1;
                    }
                    zeichen = (char) konvert;
          }
          else
          {
                if ((AInt <= konvert) && (konvert <= ZInt) ){
                          konvert = konvert + n;
                          if (konvert > ZInt){
                             dis = konvert - ZInt;
                             konvert = AInt + dis - 1;
                          }

                          zeichen = (char) konvert;
                }
          }
          System.out.print( zeichen );
     } // eof  for
     
  } // eof encrypt
//////////////////////////////////////////////////
  public static void decrypt(String krypto, int n)
  {
   //System.out.println( krypto );
   //System.out.println( n );

   int aInt = (int) 'a';
   int zInt = (int) 'z';
   int AInt = (int) 'A';
   int ZInt = (int) 'Z';
   int dis;

   int laenge = krypto.length() - 1;
   for (int i = 0; i <= laenge; i++)
   {
          char zeichen = krypto.charAt(i);
          int konvert = (int) zeichen;
          if ((aInt <= konvert) && (konvert <= zInt)){
                    konvert = konvert - n;
                    if (konvert < aInt){
                      dis = aInt - konvert;
                      konvert = zInt - dis + 1;
                    }
                    zeichen = (char) konvert;

          }
          else
          {
                if ((AInt <= konvert) && (konvert <= ZInt) ){
                          konvert = konvert - n;
                          if (konvert < AInt){
                             dis = AInt - konvert;
                             konvert = ZInt - dis + 1 ;
                          }

                          zeichen = (char) konvert;
                }
          }
          System.out.print( zeichen );
     } // eof for

  }  // eof decrypt

} // eof  class CaesarWS