www.r-krell.de |
Webangebot für Schule und Unterricht, Software, Fotovoltaik und mehr |
Willkommen/Übersicht > Informatik > Informatik mit Java, Teil j) > Kryptografie-Programm
Nach dem Webstart erscheint links oben das Kryptografie-Programm in einem Extra-Fenster:
Verfahren wählen, dann Klar- oder Geheimtext eingeben/überschreiben,
Zusatzinfo/Schlüssel eintippen (für Vigenère ist eine reine Buchstabenkombination
von mindestens 1 Zeichen Länge - aber besser länger! - erforderlich)
und erst danach Ver- oder Entschlüsseln drücken!
Wenn die Java-JRE installiert ist, können Sie das Programm jetzt sofort ausführen:
Hier klicken zum Webstart des Kryptografie-Programms |
Danach Öffnen von Kryptografie.jnlp [mit Java(TM) Webstart Launcher
(Standard)] wählen/bestätigen
und bei evtl. Sicherheitswarnung vor der Ausführung von CryptoRahmenStart das Risiko akzeptieren und OK
drücken.
Wenn Sie außerdem gefragt werden, ob Sie eine Desktop- und eine Startmenüverknüpfung
anlegen wollen,
sollten Sie zustimmen, wenn Sie das Programm auch nach Verlassen dieser Webseite nochmal ausprobieren wollen.
Wird nach dem Klick Kryptografie.jnlp herunter geladen oder werden Sie gefragt, womit Sie Kryptografie.jnlp
öffnen wollen
oder ob/wohin Sie die Datei speichern wollen, haben Sie entweder kein Java installiert oder ihr Browser (z.B. Opera) unterstützt keinen
Webstart.
Im letzten Fall empfiehlt sich nachfolgend der Download der .jar-Datei:
Sie können das Testprogramm für die klassische Kryptografie auch als ausführbare Java-Datei Kryptografie_klassisch(r-krell.de).jar (18 kB) herunter laden und später lokal auf Ihrem Rechner starten (Java-Umgebung JRE vorausgesetzt). Die Ausführung als Applet im Browser wird von mir hingegen nicht mehr angeboten: Gründe, Abhilfe und alle Downloads (in neuem Tab)
Nachfolgend der Quelltext des Programms, soweit nicht bereits auf der "Informatik-mit-Java"-Seite j) dargestellt:
Die Quelltexte zu den verschiedenen Verfahren sind bereits auf der Seite j): Kryptologie I angegeben (mit Ausnahme des Playfair-Verfahrens, das hier als Bonus integriert ist und sich von den anderen Verfahren nicht nur wegen der Verwendung von ausschließlich 25 Großbuchstaben, sondern auch dadurch unterscheidet, dass es keinen Schlüssel braucht bzw. kennt. Ist von einem Geheimtext einmal bekannt, dass er Playfair-verschlüsselt wurde, kann er sofort entschlüsselt werden, da hier die Sicherheit in der Geheimhaltung des Verfahrens statt in der Verwendung eines geheimen Schlüssels lag).
zum Inhaltsverzeichnis (oben) / zum Seitenende
// Rahmen für Kryptgrafie-Programme. Krell, 27.9.2010/23.1.2011 für IF 13M bzw. www.r-krell.de
public class CryptoRahmenStart extends java.applet.Applet
{
public static void main (String[] s)
{
CryptoRahmen cr = new CryptoRahmen();
cr.führeAus();
}
public void init() // Start als Applet
{
CryptoRahmen cr = new CryptoRahmen();
cr.führeAus();
}
}
zum Inhaltsverzeichnis (oben) / zum Seitenende
// Rahmen für Kryptografie-Programme. Krell, 27.9.2010/20.1.2011 für IF 13M bzw. www.r-krell.de
import java.awt.*;
import java.awt.event.*;
public class CryptoRahmen extends Frame implements ItemListener
// Frame ist die Fensterklasse; ItemListener für addItemListener und itemStateChanged
{
// Anfang Attribute
private Button btVerschlüsseln, btEntschlüsseln; // Vorsilben wie lb, bt, tf und ta vor den Namen
private TextField tfKlartext, tfGeheimtext, tfZusatz; // sollen auf die Art des Objekts hinweisen!
private CheckboxGroup cbg1 = new CheckboxGroup();
private Checkbox cbSkytale, cbCäsar, cbVerschiebewort, cbVigenere, cbPlayfair;
CryptoAction ca = null; // CryptoAction ist ein Interface, das die Existenz der beiden
// Methoden "String verschlüssele (String klartext, String zusatz)" und
// "String entschlüssele (String geheimtext, String zusatz)" verspricht.
// Ende Attribute
// Anfang Methoden
public void itemStateChanged (ItemEvent e) // für Radiobutton-Auswahl; cbg = check button group
// Zur Laufzeit wird ein Verfahren ausgewählt
// *** Noch nicht existierende Verfahren zunächst auskommentieren! ***
{
if (cbg1.getSelectedCheckbox().equals(cbSkytale))
{
ca = new CryptoSkytaleII();
}
else if (cbg1.getSelectedCheckbox().equals(cbCäsar))
{
ca = new CryptoCaesar();
}
else if (cbg1.getSelectedCheckbox().equals(cbVerschiebewort))
{
ca = new CryptoVerschiebewort();
}
else if (cbg1.getSelectedCheckbox().equals(cbVigenere))
{
ca = new CryptoVigenere();
}
else if (cbg1.getSelectedCheckbox().equals(cbPlayfair))
{
ca = new CryptoPlayfair();
tfZusatz.setText("** Für Playfair unnötig **");
}
}
private void richteFensterEin() // Fenster initalisieren und beschreiben
{
//WindowsListener hinzufügen, damit Schließsymbol 'x' funktioniert
addWindowListener (
new WindowAdapter ()
{
public void windowClosing (WindowEvent ereignis)
{ //ersetzt bisher leere Methode
setVisible (false);
dispose();
System.exit(0);
}
}
); // runde Klammer vom Windowlistener geschlossen;
setTitle("Kryptografie (www.r-krell.de)"); // Fenster mit Titel versehen
setSize (620,160); //Fenstergröße (Breite und Höhe in Pixeln)festlegen
// könnte auch später in führeAus() vor Layout- und add(..)-Befehlen stehen
}
private void richteKnöpfeEin()
{
btVerschlüsseln = new Button ("Verschlüsseln");
// oder: .. = new Button(); btKnopf.setLabel ("Knopf-Beschriftung");
//Funktion der Knöpfe festlegen
btVerschlüsseln.addActionListener (
new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
// Klartext mit klar = tfKlartext.getText() holen,
// verschlüsseln und Ergebnis als Geheimtext ausgeben:
if (ca==null)
{
tfGeheimtext.setText("** Vorm Verschlüsseln erst Verfahren wählen! **");
}
else
{
tfGeheimtext.setText(ca.verschlüssele(tfKlartext.getText(), tfZusatz.getText()));
// Kann fehlerfrei kompiliert werden, da ca die Existenz von verschlüssele.. verspricht
}
}
}); // runde Klammer (von addActionListener)
btEntschlüsseln = new Button ("Entschlüsseln");
// oder: .. = new Button(); btKnopf.setLabel ("Knopf-Beschriftung");
//Funktion der Knöpfe festlegen
btEntschlüsseln.addActionListener (
new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
// Geheimtext mit geheim = tfGeheimtext.getText() holen,
// entschlüsseln und Ergebnis
// mit tfKlartext.setText(ergebnis) anzeigen
if (ca==null)
{
tfKlartext.setText("** Vorm Entschlüsseln erst Verfahren wählen! **");
}
else
{
tfKlartext.setText(ca.entschlüssele(tfGeheimtext.getText(), tfZusatz.getText()));
// Kann fehlerfrei kompiliert werden, da ca die Existenz von entschlüssele.. verspricht
}
}
}); // runde Klammer (von addActionListener)
}
private void richteEingabezeilenEin()
{
tfKlartext = new TextField("Das ist ein Probetext",50);
tfGeheimtext = new TextField("",50);
tfZusatz = new TextField("",30);
tfKlartext.setFont(new Font("monospaced", 0, 12));
tfGeheimtext.setFont(new Font("monospaced", 0, 12));
}
private void richteRadioknöpfeEin()
{
cbSkytale = new Checkbox ("Skytale", cbg1, false);
cbCäsar = new Checkbox ("Cäsar", cbg1, false);
cbVerschiebewort = new Checkbox ("mono m. Merkwort", cbg1, false);
cbVigenere = new Checkbox ("Vigenère", cbg1, false);
cbPlayfair = new Checkbox ("Playfair", cbg1, false);
cbSkytale.addItemListener (this);
cbCäsar.addItemListener (this);
cbVerschiebewort.addItemListener (this);
cbVigenere.addItemListener (this);
cbPlayfair.addItemListener (this);
}
public void führeAus ()
{
richteFensterEin(); // Aufruf der Methoden zum Erzeugen der
richteKnöpfeEin(); // Bildschirmobjekte und der Definition
richteEingabezeilenEin();
richteRadioknöpfeEin();
setLayout (new FlowLayout()); // innere Unterteilung des Bildschirmfensters
add (new Label (" Klartext"));
add (tfKlartext);
add (btVerschlüsseln);
add (new Label ("Geheimtext"));
add (tfGeheimtext);
add (btEntschlüsseln);
add (new Label ("Benötigte Zusatzinfo (Umfang, Verschiebung, Schlüssel..)"));
add (tfZusatz);
add (cbSkytale);
add (cbCäsar);
add (cbVerschiebewort);
add (cbVigenere);
add (cbPlayfair);
setVisible(true); // Macht Bildschirm mit allen angeordneten
// Objekten sichtbar und startet damit das Programm
}
// Ende Methoden
}
zum Inhaltsverzeichnis (oben) / zum Seitenende
zurück zur Seite „Informatik mit Java, Teil j)"