www.r-krell.de
Webangebot für Schule und Unterricht, Software, Fotovoltaik und mehr

Willkommen/Übersicht  >  Informatik  >  Informatik mit Java, Teil k)   >  DHM-Applet starten


DHM-Applet

Über oder hinter dieser Webseite erscheint ein Extra-Fenster mit dem
Applet für die Erzeugung eines gemeinsamen geheimen Schlüssels
nach Diffie, Hellman und Merkle

Zahlen eingeben und prüfen, was bei beiden Parteien als gemeinsame
Geheimzahl heraus kommt


Achtung: Java-Applets müssen zugelassen sein. Erscheint in Ihrem Browser
oben eine gelbe Leiste, bitte drauf klicken und geblockte Inhalte zulassen...!

Applet geht nicht oder wird blockiert? - Gründe, Abhilfe und alle Downloads (in neuem Tab) - nur Diffie-Hellman-Schluesseltausch (r-krell.de).jar (6 kB)herunter laden



Nachfolgend der Quelltext des Applets, soweit nicht bereits auf der "Informatik-mit-Java"-Seite k) dargestellt:


zum Inhaltsverzeichnis (oben) / zum Seitenende

Startdatei für den Start der DHM-Demo als Applet oder als Application


// Startdatei für DHM-Programm als Application oder als Applet -- www.r-krell.de -- 8.2.2011

public class DHM_Schluesseltausch_Start extends javax.swing.JApplet
{

  
public static void main(String[] s)
  {
    
new DHM_Schluesseltausch_GUI("DHM-Schlüsselvereinbarung (www.r-krell.de) -- als Application");
  }
  
  
public void init()    // Start als Applet
  {
    
new DHM_Schluesseltausch_GUI("DHM-Schlüsselvereinbarung (www.r-krell.de) -- als Applet");
  }
}


zum Inhaltsverzeichnis (oben) / zum Seitenende


Programmtext der Oberfläche

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
  *
  * Oberfläche für Diffie/Hellman/Merkle-Schlüsseltausch bzw. -vereinbarung
  *
  * @version 1.2 (ohne JNumberField) from 8.11.2011
  * @author  R. Krell
  * für www.r-krell.de/if-java-k.htm
  */

public class DHM_Schluesseltausch_GUI extends JFrame {
  
// Anfang Attribute
  private JLabel jLabel1 = new JLabel();
  
private JLabel jLabel2 = new JLabel();
  
private JLabel jLabel3 = new JLabel();
  
private JTextField jTfP = new JTextField();
  
private JLabel jLabel4 = new JLabel();
  
private JTextField jTfG = new JTextField();
  
private JLabel jLabel5 = new JLabel();
  
private JTextField jTfA = new JTextField();
  
private JTextField jTfAlpha = new JTextField();
  
private JLabel jLabel7 = new JLabel();
  
private JTextField jTfB = new JTextField();
  
private JLabel jLabel8 = new JLabel();
  
private JTextField jTfBeta = new JTextField();
  
private JLabel jLabel9 = new JLabel();
  
private JLabel jLabel10 = new JLabel();
  
private JTextField jTfSchluesselA = new JTextField();
  
private JLabel jLabel11 = new JLabel();
  
private JTextField jTfHinweis = new JTextField();
  
private JLabel jLabel12 = new JLabel();
  
private JLabel jLabel13 = new JLabel();
  
private JButton jBtBerechnen = new JButton();
  
private JTextField jTfSchluesselB = new JTextField();
  
private JLabel jLabel6 = new JLabel();
  
private JLabel jLabel14 = new JLabel();
  
// Ende Attribute

  public DHM_Schluesseltausch_GUI (String title) {
    
super (title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    
int frameWidth = 567;
    
int frameHeight = 417;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    
int x = (d.width - getSize().width) / 2;
    
int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(
null);
    
// Anfang Komponenten
    jLabel1.setBounds(242449024);
    jLabel1.setText(
"Diffie/Hellman/Merkle-Schlüssel-'Tausch' bzw. -Erzeugung");
    jLabel1.setFont(
new Font("MS Sans Serif", Font.PLAIN, 17));
    cp.add(jLabel1);
    jLabel2.setBounds(
247223616);
    jLabel2.setText(
"Gemeinsame Funktion f(x)=(g^x)%p mit");
    jLabel2.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel2);
    jLabel3.setBounds(
280721516);
    jLabel3.setText(
"p=");
    jLabel3.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    jLabel3.setToolTipText(
"möglichst Primzahl");
    cp.add(jLabel3);
    jTfP.setBounds(
304648124);
    jTfP.setText(
"23");
    jTfP.setToolTipText(
"möglichst Primzahl !");
    cp.add(jTfP);
    jLabel4.setBounds(
392724016);
    jLabel4.setText(
"und g=");
    jLabel4.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    jLabel4.setToolTipText(
"g < p: möglichst Primitivwurzel von p");
    cp.add(jLabel4);
    jTfG.setBounds(
440649724);
    jTfG.setText(
"17");
    jTfG.setToolTipText(
"g < p;  g möglichst Primitivwurzel von p");
    cp.add(jTfG);
    jLabel5.setBounds(
2412010616);
    jLabel5.setText(
"Geheime Zahl A =");
    jLabel5.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel5);
    jTfA.setBounds(
1361129724);
    jTfA.setText(
"5");
    cp.add(jTfA);
    jTfAlpha.setBounds(
1362169724);
    jTfAlpha.setText(
"");
    jTfAlpha.setEditable(
false);
    cp.add(jTfAlpha);
    jLabel7.setBounds(
32812010616);
    jLabel7.setText(
"Geheime Zahl B =");
    jLabel7.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel7);
    jTfB.setBounds(
4401129724);
    jTfB.setText(
"18");
    cp.add(jTfB);
    jLabel8.setBounds(
32819218216);
    jLabel8.setText(
"veröffentlichbares  beta = f(B) =");
    jLabel8.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel8);
    jTfBeta.setBounds(
4402169724);
    jTfBeta.setText(
"");
    jTfBeta.setEditable(
false);
    cp.add(jTfBeta);
    jLabel9.setBounds(
2425645916);
    jLabel9.setText(
"Nach Austausch von alpha und beta kann mit der eigenen Geheimzahl jeweils");
    jLabel9.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel9);
    jLabel10.setBounds(
242888416);
    jLabel10.setText(
"(beta^A)%p = ");
    jLabel10.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel10);
    jTfSchluesselA.setBounds(
1042808124);
    jTfSchluesselA.setText(
"");
    jTfSchluesselA.setEditable(
false);
    cp.add(jTfSchluesselA);
    jLabel11.setBounds(
2082888816);
    jLabel11.setText(
"(alpha^B)%p =");
    jLabel11.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel11);
    jTfHinweis.setBounds(
39228014524);
    jTfHinweis.setText(
"");
    jTfHinweis.setEditable(
false);
    cp.add(jTfHinweis);
    jLabel12.setBounds(
2433652116);
    jLabel12.setText(
"die nur die beiden Besitzer von A und B berechnen können -- und kein Dritter, solange es");
    jLabel12.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel12);
    jLabel13.setBounds(
2435249516);
    jLabel13.setText(
"kein Verfahren gibt, um aus bekanntem f(x) in annehmbarer Zeit das x zu berechnen.");
    jLabel13.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel13);
    jBtBerechnen.setBounds(
6415243525);
    jBtBerechnen.setText(
"Berechnen");
    jBtBerechnen.setMargin(
new Insets(2222));
    jBtBerechnen.addActionListener(
new ActionListener() {
      
public void actionPerformed(ActionEvent evt) {
        jBtBerechnen_ActionPerformed(evt);
      }
    });
    cp.add(jBtBerechnen);
    jTfSchluesselB.setBounds(
2962808124);
    jTfSchluesselB.setText(
"");
    jTfSchluesselB.setEditable(
false);
    cp.add(jTfSchluesselB);
    jLabel6.setBounds(
2419218916);
    jLabel6.setText(
"veröffentlichbares  alpha = f(A) =");
    jLabel6.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    cp.add(jLabel6);
    jLabel14.setBounds(
2432047516);
    jLabel14.setText(
"als neues Geheimnis bzw. als neue, gemeinsame Schlüsselzahl erzeugt werden,");
    jLabel14.setFont(
new Font("MS Sans Serif", Font.PLAIN, 13));
    jLabel14.setEnabled(
true);
    cp.add(jLabel14);
    
// Ende Komponenten
    setResizable(false);
    setVisible(
true);
  }

  
// Anfang Methoden
  public void jBtBerechnen_ActionPerformed(ActionEvent evt)
  {
    
int p = -1;
    
int g = -1;
    
int a = -1;
    
int b = -1;
    
boolean okay = false;
    
try {
      p = Integer.parseInt(jTfP.getText());
      g = Integer.parseInt(jTfG.getText());
      a = Integer.parseInt(jTfA.getText());
      b = Integer.parseInt(jTfB.getText());
      okay = 
true;
    }
    
catch (NumberFormatException nfe)
    {  }
      
    
if (!okay)
    {
      jTfHinweis.setText(
"Fehleingabe");
    }
    
else
    {
      jTfHinweis.setText(
"");

      
// Erzeugen eines Objekts der Klasse RestVonPotenz_Rechner und Aufruf von Methoden
      // zur Berechnung von alpha, beta, schlüsselA und schlüsselB
      
      RestVonPotenz_Rechner dhm = 
new RestVonPotenz_Rechner();
      
int alpha = dhm.potMod(g,a,p);
      jTfAlpha.setText(
""+alpha);
      
int beta  = dhm.potMod(g,b,p);
      jTfBeta.setText(
""+beta);
      
      
int schlüsselA = dhm.potMod(beta,a,p);
      jTfSchluesselA.setText(
""+schlüsselA);
      
int schlüsselB = dhm.potMod(alpha,b,p);
      jTfSchluesselB.setText(
""+schlüsselB);
      
      
if (schlüsselA == schlüsselB)
      {
        jTfHinweis.setText (
"gleich!");
      }
      
else
      {
        jTfHinweis.setText (
"* ungleich *");
      }
    }
  }
}

Hinweis: Damit das Programm auch als (J-)Applet läuft, wurden die Eingabefelder vom Typ JNumberField durch Eingabefelder vom Typ JTextField ersetzt. Im Programmtext auf der Extraseite zum RSA-Applet kann man hingegen noch den Gebrauch von JNumberField-Typen sehen!


zum Inhaltsverzeichnis (oben) / zum Seitenende

Die Klasse RestVonPotenz_Rechner ist auf der Seite k) dargestellt!




zurück zur Seite „Informatik mit Java, Teil k)"




zum Anfang dieser Seite
Willkommen/Übersicht   -   Was ist neu?   -   Software   -   Mathematik   -   Physik   -   Informatik   -   Schule: Lessing-Gymnasium und -Berufskolleg   -   Fotovoltaik   -   & mehr   -   Kontakt: e-Mail,  News-Abo, Gästebuch, Impressum   -  Grußkarten, site map, Download und Suche

Diese Seite ist Teil des Webangebots http://www.r-krell.de. Sie können diese Seite per e-Mail weiter empfehlen (tell a friend).