Tuesday, May 10, 2011

Using AES ( CBC ) Encryption in java with Client Server

//File : AesClient.java
//AesClient
//Developed by Malhar Vora
//Developed on : 9-5-2011
import java.io.*;
import java.net.*;
import java.util.*;
import java.math.*;
import javax.crypto.*;
import java.security.*;
import javax.crypto.spec.*;




public class AesClient
{
    static KeyGenerator kg = null;
 static Cipher c = null;
 static Key k = null;
 static byte[] ivector=null;
 public static void main(String []str)
 {
  
  String datatosend=null;
     try
  {
      datatosend = encryptString(getDataFromFile("Data.txt"));
   Frame f = new Frame(datatosend,k,ivector);
   
   
   
   sendFrame("localhost",5656,f);
    
  }
  catch(Exception e)
  {
   System.out.println(e);
  }
  
 }
 
 static String getDataFromFile(String filename) throws Exception 
 {
     String str="";
  Scanner sc  = new Scanner(new File(filename));
  while(sc.hasNextLine())
  {
   str=str + sc.nextLine();
  }
  sc.close();
  return str;
  
 }
 
 static String encryptString(String data) throws Exception
 {
     kg = KeyGenerator.getInstance("AES");
  kg.init(128);
  c = Cipher.getInstance("AES/CBC/PKCS5Padding");
  k = kg.generateKey();
  
    
  c.init(Cipher.ENCRYPT_MODE,new SecretKeySpec("1234512345123451".getBytes(),"AES"));
  byte[] plaintext = data.getBytes();
  byte[] ciphertext = c.doFinal(plaintext);
  
  ivector = c.getIV();
          
  return new String(ciphertext);
  
 }
 
 static void sendFrame(String remoteaddress,int port,Frame f) throws Exception
 {
     Socket s = new Socket(remoteaddress,port);
  OutputStream os = s.getOutputStream();
  ObjectOutputStream ous = new ObjectOutputStream(os);
  
  ous.writeObject(f);
  
  ous.close();
  os.close();
  s.close();       
 
 }
 
  
 
 
 

}

/*******************************************************************/

//File : AesServer.java
//AESReceiver
//Developed by Malhar Vora
//Developed on : 9-5-2011
import java.io.*;
import java.net.*;
import java.util.*;
import java.math.*;
import javax.crypto.*;
import java.security.*;
import javax.crypto.spec.*;

public class AesServer
{

 public static void main(String []str)throws Exception
 {
    ServerSocket ss = new ServerSocket(5656);
    Socket s = null;
    InputStream is = null;
    ObjectInputStream ois = null;
    Frame f =null;
    
    while(true)
    {
    s=ss.accept();
    is = s.getInputStream();
    ois = new ObjectInputStream(is);
    f = (Frame)ois.readObject(); 
    
    System.out.println(decryptString(f.data,f.k,new IvParameterSpec(f.iv)));    
           
    break;
    }
    
    ois.close();
    is.close();
    s.close();
    ss.close();  
  
 }
 
  
 
 static String decryptString(String data,Key key,IvParameterSpec ivspec)throws Exception
 {
     KeyGenerator kg = KeyGenerator.getInstance("AES");
  kg.init(128);
  Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
  Key k = key;
  
  c.init(Cipher.DECRYPT_MODE,new SecretKeySpec("1234512345123451".getBytes(),"AES"),ivspec);
  
  
  
  byte[] plaintext = c.doFinal(data.getBytes());
  
  return new String(plaintext);
 }
 
  
 
}

/********************************************************************/

//File : Frame.java
//Frame Class
//Developed by Malhar Vora
//Developed on : 9-5-2011
import java.io.*;
import java.net.*;
import java.util.*;
import javax.crypto.*;
import java.security.*;
import javax.crypto.spec.*;

public class Frame implements Serializable
{
    
    String data;
    Key k;
 byte[] iv;

    Frame(String mydata,Key key,byte[] ivector)
    { 
  data=mydata;
  k = key;
  if(ivector==null)
  {
     iv = null;
  }
  else
  {
   iv = new byte[ivector.length];
   for(int i=0;i<ivector.length;i++)
   {
    iv[i]=ivector[i];
   }
  }
 }  

}



No comments:

Post a Comment