Tuesday, 27 November 2012

Diffie Hellman (Java)

Diffie Hellman: Receiver

import java.io.*;
import java.net.*;
import java.util.*;

public class DeffieHellmanRcv {

DatagramSocket theSocket = null;

int serverPort = 9999;
Scanner sc;
int y,g,p,r2;

DatagramPacket theRecievedPacket;
DatagramPacket theSendPacket;
InetAddress clientAddress;
int clientPort;
byte[] outBuffer;
byte[] inBuffer;

public DeffieHellmanRcv()
{
try {
// create the server UDP end point
theSocket = new DatagramSocket(serverPort);

System.out.println("Bob");
} catch (SocketException ExceSocket)
{
System.out.println("Socket creation error : "+ ExceSocket.getMessage());
}
}

public void keyGen()
{

sc=new Scanner(System.in);

System.out.print("Enter p=");
p=sc.nextInt();

System.out.print("Enter g=");
g=sc.nextInt();


System.out.print("Enter y=");
y=sc.nextInt();

r2= (int)(Math.pow(g,y)) % p;
//System.out.println("R2= "+r2);

}

public void send()
{
try
{
String message =r2+"";
System.out.println("Message Send:"+message);
//System.out.println("Message  sent: "+message);
outBuffer=message.getBytes();

System.out.println(message);
// send some data to the client
theSendPacket = new DatagramPacket(outBuffer, outBuffer.length, clientAddress, clientPort);
theSocket.send(theSendPacket);
}

catch (Exception e)
{
System.out.println("Error with client request : "+e);
}
// close the server socket


}

public void receive()
{


// create some space for the text to send and recieve data
outBuffer = new byte[500];
inBuffer = new byte[50];

try
{
// create a place for the client to send data too
theRecievedPacket = new DatagramPacket(inBuffer, inBuffer.length);

// wait for a client to request a connection
theSocket.receive(theRecievedPacket);
//System.out.println("Client connected");

// get the client details
clientAddress = theRecievedPacket.getAddress();
clientPort = theRecievedPacket.getPort();



String message = new String(theRecievedPacket.getData(),0,theRecievedPacket.getLength());


String sendData = message+"";
System.out.println("Message Recieved: "+message);
System.out.println(sendData);
outBuffer = sendData.getBytes();


int k2=(int)(Math.pow((Integer.parseInt(message)),y))%p;


System.out.println("\n\nk2= "+k2);

}
catch(Exception e)
{
System.out.println("E2"+e);
}

}





public static void main(String[] args)
{
DeffieHellmanRcv dr = new DeffieHellmanRcv();
dr.keyGen();
dr.receive();
dr.send();
}
}

Download the code from here

Diffie Hellman: Sender


import java.util.*;
import java.io.*;
import java.net.*;


public class DeffieHellmanSend
{
DatagramSocket theSocket = null;
int serverPort = 9999;
Scanner sc;
int x,g,p,r1;
DatagramPacket theSendPacket;
DatagramPacket theReceivedPacket;
InetAddress theServerAddress;
byte[] outBuffer;
byte[] inBuffer;

public DeffieHellmanSend()
{

try
{
theSocket = new DatagramSocket();

// but if you want to connect to your remote server, then alter the theServer address below
InetAddress theServer = InetAddress.getLocalHost();
theSocket.connect(theServer,serverPort);

System.out.println("Alice");
}
catch (SocketException ExceSocket)
{
System.out.println("Socket creation error  : "+ExceSocket.getMessage());
}
catch (UnknownHostException ExceHost)
{
System.out.println("Socket host unknown : "+ExceHost.getMessage());
}
}

public void keyGen()
{
sc=new Scanner(System.in);

System.out.print("Enter p=");
p=sc.nextInt();

System.out.print("Enter g=");
g=sc.nextInt();


System.out.print("Enter x=");
x=sc.nextInt();

r1= (int)(Math.pow(g,x)) % p;
System.out.println("R1= "+r1);

}

public void send()
{
// the place to store the sending and receiving data
inBuffer = new byte[500];
outBuffer = new byte[50];

try
{
String message=r1+"";
System.out.println("Message Sent:"+message);
outBuffer = message.getBytes();
// the server details
theServerAddress = theSocket.getLocalAddress();

// build up a packet to send to the server
theSendPacket = new DatagramPacket(outBuffer, outBuffer.length, theServerAddress, serverPort);
// send the data
theSocket.send(theSendPacket);


}
catch (IOException ExceIO)
{
System.out.println("Client getting data error : "+ExceIO.getMessage());
}

}


public void receive()
{
try
{
// get the servers response within this packet
theReceivedPacket = new DatagramPacket(inBuffer, inBuffer.length);
theSocket.receive(theReceivedPacket);

// the server response is...

String message = new String(theReceivedPacket.getData(),0,theReceivedPacket.getLength());

System.out.println("Message Recieved : "+message);

int temp=(int)(Math.pow((Integer.parseInt(message)),x));
temp=temp%p;
int k1=temp;
System.out.println("The temp is : "+k1);

//int k1=Integer.parseInt((Math.pow((Integer.parseInt(message)),x))%p);
//int k1=(int)(Math.pow((Integer.parseInt(message)),x))%p;


//System.out.println("Message REcieved: "+message);
//System.out.println("\n\nk1= "+k1);
}
catch(Exception e)
{
System.out.println("E1"+e);
}


}

public static void main(String[] args)
{
DeffieHellmanSend df = new DeffieHellmanSend();
df.keyGen();
df.send();
df.receive();

}
}

Download the code from here

0 comments:

Post a Comment