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; } }