DiffieHellmanApplet-Applet


 
 DiffieHellman dh= new DiffieHellman();
   long a,b,g,p,sa,sb,s;
   public void generatePimeActionPerformed(ActionEvent evt) {
   p= dh.newP();
   tp.setText(p+"");
   }
 public void generateGeneratorActionPerformed(ActionEvent evt) {
   g= dh.newG();
   tg.setText(g+"");
 }
 public void generateSecretAActionPerformed(ActionEvent evt) {
   a= dh.newA();
   ta.setText(a+"");
   }
 public void generateSecretBActionPerformed(ActionEvent evt) {
   b= dh.newB();
   tb.setText(b+"");
   }
 public void losActionPerformed(ActionEvent evt) {
   if (tp.getText().equals("")) {
   	p= dh.newP();
   	tp.setText(p+"");
   }
   else p=Long.parseLong(tp.getText());
   protokoll.append("Primzahl p ist: "+p+"\n");
   if (tg.getText().equals("")) {
   	g= dh.newG();
   	 tg.setText(g+"");
   }
   else g=Long.parseLong(tg.getText());
   protokoll.append("Generator g ist: "+g+"\n");
   if (ta.getText().equals("")) {
   	a= dh.newA();
   	ta.setText(a+"");
   }
   else a=Long.parseLong(ta.getText());
   protokoll.append("Geheimzahl a ist: "+a+"\n");
   if (tb.getText().equals("")) {
   	b= dh.newB();
   	tb.setText(b+"");
   }
   else b=Long.parseLong(tb.getText());
   protokoll.append("Geheimzahl b ist: "+b+"\n");
   sa=dh.modulFunktion(g,a,p);
   sb=dh.modulFunktion(g,b,p);
   tsa.setText(sa+"");
   protokoll.append("öffentlicher Schlüssel sa ist: "+sa+"\n");
   tsb.setText(sb+"");
   protokoll.append("öffentlicher Schlüssel sb ist: "+sb+"\n");
   s=dh.modulFunktion(sb,a,p);
   protokoll.append("Schlüssel s von Alice: "+s+"\n");
   s=dh.modulFunktion(sa,b,p);
   protokoll.append("Schlüssel s von Bob: "+s+"\n");
   ts.setText(s+"");
 }

import java.util.*;
import java.math.BigInteger;
public class DiffieHellman {
static int bits=20;
private long p;
private long g;
private long a;
private long b;
private long sa;
private long sb;
private long s;
public DiffieHellman(){
p=randomPrime(bits);
g=randomPrime(bits-2);
a=randomPrime(bits/2);
b=randomPrime(bits/2);
}
public long getP(){
return p;
}
public long getG(){
return g;
}
public long getA(){
return a;
}
public long getB(){
return b;
}
public long newP(){
p= randomPrime(bits);
return p;
}
public long newG(){
g= randomPrime(bits-2);
return g;
}
public long newA(){
a= randomPrime(bits/2);
return a;
}
public long newB(){
b= randomPrime(bits/2);
return b;
}
//zufällige Primzahl
public long randomPrime(int bits){
BigInteger pr= new BigInteger(bits,10000,new Random());
return pr.longValue();
}
public long modulFunktion(long a, long b, long p){
// Berechnet a^b mod p
long i= b/2; long r= b%2;
long mod=1;
for (long j=0;j<i;j++){
mod=(mod*(a*a))%p;
}
if (r!=0) mod=(mod*(r*a))%p;
return mod;
}
}