Saturday, August 14, 2010

My Agent Security Scenario: The Code-Encrypt Class

/*
This Aglet do the dispatching ,loading Sec information from the file 
and encryption and return back to home to send values to Decrypt message
*/
//the folder examples contained in ASDK folders
//and considered by ASDK as default folder where
//to find all agent projects
//the folder Sec is sub folder at examples folder
//I created to place my java classes in
package examples.Sec;
//com.ibm.aglet is an aglet package has
//set of classes have to with aglet contained again
//in ASDK folders , the star (*) means to the ability
//to reuse all the classes at the package
import com.ibm.aglet.*;
//Interface MobilityListener support the methods
//have to do with aglet transfering for example 
//onDispatching() called before the aglet dispatch
//since calling disaptch(URL) method
import com.ibm.aglet.event.*;
//package needed for networking applications,I import it
//since I need to use th URL java class to point for 
//the host on the WWW , that contains the user name and password 
import java.net.*;
//package at JDK contains the Scanner class and others
import java.util.*;
//Package contained into JDK contains the classes to handle 
//I/O from data storage ,for example contains the File class 
//to read or write from or to a simple file
import java.io.*;
public class Encrypt extends Aglet
{ 
 //Declare the variables to handle the secret information
    //from the remote host at the WWW 
    public String userName=new String();
    public String password=new String(); 
 
 //Declare and initialiation the indicators to 
 //determine the aglet location
 //_At_Home status means the aglet newly created and 
    //did not transfere and read the secret information 
    //from the remote host and the dispatch method shall be called 
 public int _AT_HOME=0;
 //_At_REMOTE means the aglet reached successfully to the 
 //remote host over the WWW containing the user name and the password
 //and so the loading and encryption shall take place
 public int _At_REMOTE=1;
 //_Back_AT_HOME means the aglet read the secret information
 //and encrypt them and return back to the home and the time is
 //suitable to fill in tabular message and send them to the decrypt aglet
 public int _Back_AT_HOME=2;
 //_STATE can be _AT_HOME,_At_REMOTE,_Back_AT_HOME
    public int _STATE=0; 
 //create interface to handle the file open,close,read 
 //or write
 public static File infile=new File("C:/Secret.txt");;
 public static Scanner input;
 //help to store the secret infoemation in hash table with two 
 //columns one for keys and other for value , to reach val1 you 
 //need to know Key1
 Message secretInformation=new Message("secretInformation");
 //method executed when the aglet created,dispatched,reverted
 //main operations of the aglet can take place here
 public void run()
 {
  if(_STATE==_AT_HOME)
  {
      
   try
   {
    //the _STATE changed since next time the run() 
    //executed the aglet will be at remote host    
    _STATE=_At_REMOTE;
    //the method will dispatch (say push !) 
    //to the URL specified staticall by the value :
    //"atp://OMAR-PC:1024" at the object of type 
    //URL 
    dispatch(new URL("atp://OMAR-PC:1024"));
   }//end try block
   catch(Exception e)
   {
       //reaching to this block the failure 
       //to dispatch takes place 
       System.out.println("Error -- "+e);
   }//end catch block
  }//end if statement
  else if(_STATE==_At_REMOTE)
  {
      //array will help the Encrypt() method
   //to store each character in the user name and the
   //password and value of ASCII code of each character
   //at the user name and password
      Global.array_char=new char[10];
            Global.array_int=new int[10];
   try
   {
    //Scanner class can hanbdle the read operation from
    //text file contains the secret information
    input=new Scanner(infile);
    //read the user name from the file and store at the 
    //username variable using next() methos that will read entire
    //line
    userName=input.next();
    //convert the user name from string to array of 
    //characters for  issues have to with the methodology
    //how encrypt method encrypt data
    Global.array_char=userName.toCharArray();
    //print the user name as clear text on the console
    System.out.println("user name as clear text  : "+userName);
    encrypt();//call the encrypt method
    userName="";
    //convert the array of characters ,contains the characters 
    //of the username in encrypted manner,to string
    userName=Global.array_in_string();
    //read the password from the file and store at the 
    //password variable using next() methos that will read entire
    //line
          password=input.next();
    //print the Password as clear text on the console
    System.out.println("Password as clear text  : "+password);
       //convert the array of characters ,contains the characters 
    //of the username in clear text manner,to string
    Global.array_char=password.toCharArray();
    encrypt();//call the encrypt method
    password="";
    //convert the array of characters ,contains the characters 
    //of the password in encrypted manner,to string
    password=Global.array_in_string();
    System.out.println();
    //print the username and the password in encrypted manner
    System.out.println("user name after encryption : "+userName);
    System.out.println("password  after encryption : "+password);
       System.out.println();
   
   }//end try block
   catch(Exception n)
   {
       //catch block can catch any type of exception , which
                //may be fail to find the file to open    
    System.out.println("to open the file : "+n);
   }//end catch block
   
   try
   {
       //the _STATE changed since next time the run() 
    //executed the aglet will be at remote host 
    _STATE=_Back_AT_HOME;
    //the method will dispatch (say push !) 
    //to the URL specified staticall by the value :
    //"atp://OMAR-PC:4434" at the object of type 
    //URL that defines the aglet Home URL
    //over WWW
    dispatch(new URL("atp://OMAR-PC:4434"));
   }//end try block
   catch(Exception e)
   {
      //reach to this block means an exception
      //takes place that may be failure to dispatch
      System.out.println("Fail to return home ");
   }//end catch block
   
   
   }//end if statement
   else if(_STATE==_Back_AT_HOME)
   {
    
    //filll the hash table at the object of type message 
    //that will contain two pairs one for the password and its keyword
    //and the other the user name and the paired keyword
    //setArg is a method at Message class takes two parameters 
    //to fill hash table one the key and the other is the value matched
    //by the Key 
    secretInformation.setArg("User Name",userName);
    secretInformation.setArg("Password",password);
    
    try
    {
    //Father Aglet contains the decryptProxy that object
    //of type AgletProxy that help to handle Decrypt Aglet 
    //and will be used here to send message to Decrypt Aglet
    //I defined the decryptProxy as static variable at Father Aglet
    //And so I can use it here at the current aglet
     Father.decryptProxy.sendMessage(secretInformation);
     dispose();//the current aglet killed here
    }//end try block
    catch(InvalidAgletException e)
    {
    //Signals that the aglet proxy
                //is not valid any longer. 
     System.out.println("InvalidAgletException is thrown");
    }//end catch block
    catch(NotHandledException e)
    {
     //the message not handled by the 
     //destined to Aglet
     System.out.println("NoHandledException is thrown");
    }//end try block
    catch(MessageException e)
    {
     //Signals that the exception occured 
     //while processsing the message. 
     System.out.println("MessageException thrown");
    }//end catch block
    catch(Exception e)
    {
       //The class Exception and its subclasses are 
       //a form of Throwable that indicates conditions 
       //that a reasonable application might want to catch
     System.out.println("fail to send due to : "+e);
    }//end catch block
  
         }//end nested if have to do with aglet location 
  
        }//end the run() method
  public void encrypt()
  {
      //for lop on the characters of the array of characters
   //represents the clear text usename and password
   for(int h1=0;
   h1 < Global.array_char.length;h1++)
   {
    
    Global.array_int[h1]=(int)Global.array_char[h1];
    
    if(Global.array_int[h1]>=97&&Global.array_int[h1]<=122)
    {
        //handle the lower case letters
     if((Global.array_int[h1]+3)> 122)
     {
         //for example we have z we need to encrypt to 
      //c lower case letter and the below formula do that and then 
      //convert the ASCII code into letter again and store into array 
      //of characters
      Global.array_int[h1]=Global.array_int[h1]+3;
      Global.array_int[h1]=124-Global.array_int[h1];
      Global.array_int[h1]+=96;
            Global.array_char[h1]=(char)Global.array_int[h1];
     }
     else
     {
         //the process that you need to encrypt Only to 
      //move three forwarding steps in the alphabetical order 
      Global.array_int[h1]=Global.array_int[h1]+3;
      Global.array_char[h1]=(char)Global.array_int[h1];
     }  
    }
    else if(Global.array_int[h1]>=65&&Global.array_int[h1]<=90)
    {
        //handle the upper case letters
     if((Global.array_int[h1]+3)>90)
     {
      //for example we have Y we need to encrypt to 
      //B lower case letter and the below formula do that and then 
      //convert the ASCII code into letter again and store into array 
      //of characters
      Global.array_int[h1]=Global.array_int[h1]+3;
      Global.array_int[h1]=Global.array_int[h1]%90;
      Global.array_int[h1]+=64;
         Global.array_char[h1]=(char)Global.array_int[h1];
     }
     else 
     {
         //the process that you need to encrypt Only to 
      //move three forwarding steps in the alphabetical order
      Global.array_int[h1]=Global.array_int[h1]+3;
      Global.array_char[h1]=(char)Global.array_int[h1];
        }
    }
    //handle the case that the current item
    //not english alphabetical letter
    else Global.array_char[h1]=(char)Global.array_int[h1];
  }//end for loop that check the characters of the array of characters 
  //contains the user name and password characters
 }//end encrypt() method
}//end Encrypt Aglet

No comments:

Post a Comment