Labprograms

1.program code for character stuffing and destuffing in java
import java.io.*;
import java.util.*;
import  java.lang.*;
class Charstuff

    public static void main(String args[])
    {
        Scanner k =new Scanner (System.in);
        System.out.println("enter the string\t");
        String s=k.nextLine();
         String str1;
         String str2="";
        int i,m,j;
        m=s.length();
        System.out.println("original data     "+s);
       str1="dlestx";
       for(i=0;i<=m-1;i++)
       {
         if((s.charAt(i)=='d')&&(s.charAt(i+1)=='l')&&(s.charAt(i+2)=='e'))
        {
        str1=str1+"dle";
        }
        str1=str1+s.substring(i,i+1);
    }
    str1=str1+"dleetx";
    int p=str1.length();
    System.out.println("transmitted data      "+str1);
    for(i=6;i<p-6;i++)
    {
        if((str1.charAt(i)=='d')&&(str1.charAt(i+1)=='l')&&(str1.charAt(i+2)=='e')&&(str1.charAt(i+3)=='d')&&(str1.charAt(i+4)=='l')&&(str1.charAt(i+5)=='e'))
        {
            i=i+3;
        }
        str2=str2+str1.substring(i,i+1);
    }
    System.out.println("received data is         "+str2);
    }
}       



BITSTUFFING


import java.io.*;
import java.*;
class Bitstuff
{
        public static void main(String args[])throws Exception
        {
                int a[]=new int[70];
                int b[]=new int[70];
                int ca[]=new int[70];
                BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                System.out.println("Enter how many bits u want to enter");
                int n,i,j=0,k,c=0;
                n=Integer.parseInt(br.readLine());
                System.out.println("Enter "+n+" bits 0,1");
                for(i=0;i<n;i++)
                {
                        a[i]=Integer.parseInt(br.readLine());
                        if(a[i]!=0&&a[i]!=1)
                        {
                        System.out.println("Invalid input,try again");
                                i=-1;
                                continue;
                        }
                }
                for(j=0;j<=7;j++)
                {
                        if(j==0||j==7)
                              b[j]=0;
                        else
                              b[j]=1;
                }
                for(i=0;i<n;i++)
                {
                        if(a[i]==1)
                                c++;
                        if(a[i]==0&&c<=4)
                                c=0;
                        if(c==5)
                        {
                                b[j++]=a[i];
                                b[j++]=0;
                                c=0;
                        }
                        else
                                b[j++]=a[i];
                }
                for(int m=0;m<=7;m++)
                {
                        if(m==0||m==7)
                                b[j++]=0;
                        else
                                b[j++]=1;
                }
                System.out.println("Stuffed data is: ");
                for(i=0;i<j;i++)
                        System.out.print(b[i]);
                c=k=0;
                j=j-8;
                for(i=8;i<j;i++)
                {
                        if(b[i]==1)
                                c++;
                        if(b[i]==0)
                                if(c==5)
                                {
                                   i++;
                                   ca[k++]=b[i];
                                   c=1;
                                          continue;
                                }
                                else
                                           c=0;
                        ca[k++]=b[i];
                }
                System.out.println("\nAfter Destuffing");
                for(i=0;i<k;i++)
                        System.out.print(ca[i]);
        }
}
               







Output:

C:\>javac Bitstuff.java

C:\>java Bitstuff

Enter how many bits you want to enter
10
Enter 10 bits 0,1
0
1
1
1
1
1
1
1
1
0
Stuffed data is
011111100111110111001111110
After Destuffing
0111111110


      

















Character stuffing

import java.io.*;
public class CharStuff
{
        public static void main(String args[])throws Exception
        {
                String str=" ";
                StringBuffer stuff;
                StringBuffer destuff;
                System.out.println("Enter a string:- ");
                BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                str=br.readLine();
                int i;
                stuff=new StringBuffer(str);
                int len=stuff.length();
                for(i=0;i<len;i++)
                {
                        if(str.charAt(i)=='d' && str.charAt(i+1)=='l'&&str.charAt(i+2)=='e')
                        stuff.insert(i+3,"dle");
                }
                stuff.insert(0,"dlestx");
                stuff.append("dleetx");
                System.out.println("stuffed data: "+stuff);
                destuff=new StringBuffer();
                destuff.append(stuff.delete(0,7));
                destuff.reverse();
                destuff.delete(0,7);
                destuff.reverse();
                for(i=0;i<destuff.length();i++)
                {
        if(destuff.charAt(i)=='d'&&destuff.charAt(i+1)=='l'&&destuff.charAt(i+2)=='e')
                        {
                             if(destuff.charAt(i+3)=='d'&&destuff.charAt(i+4)=='l'&&destuff.charAt(i+5)=='e')
                                        destuff.delete(i+3,i+6);
                        }
                }
                   System.out.println("Destuffed data: "+destuff);
          }
}


Output:


C:\>javac CharStuff.java

C:\>java CharStuff
Enter a string:-
abcdlefgh
stuffed data: dle stxabcdledlefghdle etx
Destuffed data: abcdlefgh


DIJKSTRA’S ALGORITHM





import java.lang.*;
import java.io.*;
import java.util.*;
class Main
{
        public static void main(String args[])
        {
               BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
                      System.out.println("Enter how many vertices:");
               int n;
               n=Integer.parseInt(b.readLine());
               int a[][]=new int[n][n];
               int set[]=new int[n];
                      int path[]=new int[n];
                      int len[]=new int[n];
               int j,k,s,f,i,d;
               System.out.println("Enter "+n*n+"weights for the graph");
               for(i=0;i<n;i++)
               for(j=0;j<n;j++)
               a[i][j]=Integer.parseInt(b.readLine());
               System.out.println("ENter the source vertex");
               s=Integer.parseInt(b.readLine());
               s=s-1;
               for(i=0;i<n;i++)
                   set[i]=0;
                   set[s]=1;
               for(i=0;i<n;i++)
               {
                if(a[s][i]==0)
                {
                        len[i]=1234;
                        path[i]=-1;
                }
                else {
                        len[i]=a[s][i];
                        path[i]=s;
                       }
                }
                len[s]=0;
                f=1;
                while(f==1)
                {
                j=srch(len,set,n);
                set[j]=1;
                for(i=0;i<n;i++)
                {
                        if(set[i]==1)
                           continue;
                        else if(a[i][j]!=0)
                                      if(len[j]+a[i][j]<len[i])
                               {
                                            len[i]=len[j]+a[i][j];
                                     path[i]=j;
                                }
                 }
                        f=0;
                 for(k=0;k<n;k++)
                       if(set[k]==0)
                       {
                             f=1;
                             break;
                       }
                   }
                  System.out.println("ENter the destination vertex");
                  d=Integer.parseInt(b.readLine());
                  System.out.println("shortest path from the vertex "+s+" to the vertex "+d+" is ");
                  System.out.print("v"+d+"<-");
                  d=d-1;
                  for(i=d;i!=s;)
                  {
                  System.out.print("v"+(path[i]+1)+"<-");
                  i=path[i];
                   }
         }
               static int srch(int l[],int s[],int n)
        {
                int temp[]=new int[n];
                int i,j=0,min;
                for(i=0;i<n;i++)
                        if(s[i]==0)
                                           temp[j++]=l[i];
                min=temp[0];
                for(i=1;i<j;i++)
                       if(min>temp[i])
                          min=temp[i];
                for(i=0;i<n;i++)
                        if(s[i]==0&&min==l[i])
                                          break;
                               return i;
        }
}


Output:

C:\ java main
Enter how many vertices : 5
Enter 25 weights for the graph
0       1       0
2       1       
3       3 
0       0
0       0
2       2
0       0
0       0
1       1
1       2
3       0
0       1
0       0
2       1
0       0
0       1

Enter the source vertex:   1
Enter the destination vertex: 5
Shortest path from the vertex 0 to the vertex 5 is
        V5<-v2<-v1<-
                //PROGRAM TO ILLUSTRATE LINK STATE ROUTING ALGORITHM

 import java.io.*;

class Weightedgraph
{
                int size;
                int adjmat[][];
                Weightedgraph(int a[][],int n)
                {
                size=n;
                adjmat=new int [size][size];
                for(int i=0;i<size;i++)
                for(int j=0;j<size;j++)
                adjmat[i][j]=a[i][j];
                }
                public void shortestpath()
                {
                                int i;
                                int min;
                                int v,w;
                                boolean found[]=new boolean[size];
                                int d[]=new int[size];
                                found[0]=true;
                                d[0]=0;
                                for(v=1;v<size;v++)
                                {
                                 found[v]=false;
                                d[v]=adjmat[0][v];
                                }
                                for(i=1;i<size;i++)
                                {
                                 min=99999;
                                for(w=1;w<size;w++)
                                {
                                  if(!found[w]&&d[w]<min)
                                  {
                                   v=w;
                                   min=d[w];
                                  }
                                }
                                found[v]=true;
                                for(w=1;w<size;w++)
                                if(!found[w])
                                if(min+adjmat[v][w]<d[w])
                                d[w]=min+adjmat[v][w];
                                }
                System.out.println(“Using linkstate routing”);
                System.out.println("Shortest path from vertex 0 to other vertices ");
                for(i=1;i<size;i++)
                System.out.println("0->"+i+":"+d[i]);

           }
}
class Link
{
                public static void main(String args[])throws Exception
                {
                   final int INF=99999;
                int a[][]={
                {INF,2,3,6,INF},
                {2,INF,4,1,1},
                {3,4,INF,INF,2},
                {INF,1,INF,INF,1},
                {INF,1,2,1,INF},
                                };
                Weightedgraph wg=new Weightedgraph(a,5);
                wg.shortestpath();
                }
}

/*
OUTPUT:-

D:\>javac Link.java

D:\>java Link
Shortest path from vertex 0 to other vertices
0->1:2
0->2:3
0->3:3
0->4:3
*/




          /*  Distance Vector Routing */

import java.io.*;


class DVR
{
                public static void main(String args[])throws Exception
                {
                int N=6;
                int i,j,k,R;
                int array[][][]=new int[6][6][3];
                int temp[][]=new int[6][3];
                int INF=99999;
                DataInputStream dis=new DataInputStream(System.in);
                int graph[][]={
                                                {0,1,4,INF,INF,3},
                                                {1,0,INF,2,4,INF},
                                                {4,INF,0,INF,2,INF},
                                                {INF,2,INF,0,INF,3},
                                                {INF,4,2,INF,0,2},
                                                {3,INF,INF,3,2,0}
                                      };
                for(R=0;R<N;R++)
                for(i=0;i<N;i++)
                {
                array[R][i][0]=i+1;
                array[R][i][1]=graph[R][i];
                }
                for(R=0;R<N;R++)
                {
                for(int tempval=0;tempval<N;tempval++)
                {
                temp[tempval][0]=array[R][tempval][0];
                if(array[R][tempval][1]==INF)
                temp[tempval][1]=0;
                else
                temp[tempval][1]=array[R][tempval][1];
                temp[tempval][2]=0;
                }
                for(i=0;i<N;i++)
                {
                                if(array[R][i][1]!=INF && array[R][i][1]!=0)
                                {
                                int nextvalue=array[R][i][1];
                               
 for(k=0;k<N;k++)
                                {
                                                if(array[R][k][1]==INF)
                                                {
                                                if(array[i][k][1]!=INF && array[i][k][1]!=0)
                                                {
                                                if(temp[k][1]==0)
                                                {
                                                temp[k][1]=array[i][k][1]+nextvalue;
                                                temp[k][2]=i+1;
                                                }
                                                else if(temp[k][1]>0)
                                                {
                                                int maxvalue=temp[k][1];
                                                if(maxvalue>array[i][k][1]+nextvalue)
                                                {
                                                temp[k][1]=array[i][k][1]+nextvalue;
                                                temp[k][2]=i+1;
                                                }
                                }
                }
   }
 }
 }
 else
                continue;
}
System.out.println("\n----------------------");
System.out.println("Final routing table for node:"+(R+1));
System.out.println("\n -----------------------");
System.out.println("To cost next :");
System.out.println("\n-------------------------");
for(int tempval=0;tempval<N;tempval++)
{
                System.out.println(" "+temp[tempval][0]+" "+temp[tempval][1]+" "+temp[tempval][2]);
                array[R][tempval][0]=temp[tempval][0];
                array[R][tempval][1]=temp[tempval][1];            
                array[R][tempval][2]=temp[tempval][2];
}
}
}
}



/* OUTPUT :

D:\sre>javac DVR.java       
D:\sre>java DVR                                                
----------------------       
  Final routing table for node:1       
  -----------------------       
To cost next :                                               
  -------------------------     
  1 0 0                        
  2 1 0                         
 3 4 0                         
 4 3 2                       
 5 5 2                         
 6 3 0                               
 ----------------------    
  Final routing table for node:2    
 -----------------------    
   To cost next :                                             
  -------------------------
    1 1 0 
    2 0 0
    3 5 1 
    4 2 0
    5 4 0
    6 4 1
    ---------------------- 
    Final routing table for node:3
   -----------------------  
     To cost next :
    -------------------------   
     1 4 0 
     2 5 1 
     3 0 0
      4 7 1
      5 2 0  
      6 4 5 
 








  ----------------------     
  Final routing table for node:4  
  ----------------------- 
     To cost next : 
  -------------------------    
   1 3 2
    2 2 0
    3 7 2  
    4 0 0   
    5 5 6 
    6 3 0  
  ----------------------  

Final routing table for node:5   
      
  ----------------------- 
      To cost next :  
   ------------------------- 
 1 5 2   
 2 4 0   
 3 2 0
  4 5 6 
  5 0 0  
  6 2 0     
  ----------------------   
  Final routing table for node:6   
  -----------------------    
   To cost next :                                        
  -------------------------   
    1 3 0 
     2 4 1     
     3 4 5     
     4 3 0     
     5 2 0    
     6 0 0                                                         
*/
/* A)  Substitution */


import java.io.*;

class Sub
{
                public static void main(String args[])throws IOException
                {
                BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
                System.out.println("\n Enter a line to encode: ");
                String str=br.readLine();
                StringBuffer str1=new StringBuffer();
                System.out.println("\n Before encoding:"+str);
                for(int i=0;i<str.length();i++)
                {
                char ch=str.charAt(i);
                if(Character.isWhitespace(ch))
                                str1.append(" ");
                else
                {
                int j=(Character.valueOf(ch)+3);
                if(j<(int)(Character.valueOf('z')))
                                str1.append((char)(j));
                else
                                str1.append((char)(j-26));
                }
                }
                System.out.println("\n After coding: " +str1);
                }
}

/* OUTPUT
D:\sre>notepad Sub.java

D:\sre>javac Sub.java

D:\sre>java Sub

 Enter a line to encode:
Jbict

 Before encoding:Jbict

 After coding: Melfwf           */

/* B) Transposition */

import java.io.*;

public class Tra
{
                public static void main(String args[])throws IOException
                {
                BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
                System.out.println("\n Enter a line to encode: ");
                String str=b.readLine();
                StringBuffer str1=new StringBuffer();
                System.out.println("\n Enter number of keys :");
                int n=Integer.parseInt(b.readLine());

                for(int i=0;i<str.length();i+=2)
                                str1.append(str.charAt(i));
                for(int i=1;i<str.length();i+=2)
                                str1.append(str.charAt(i));
                StringBuffer []str2=new StringBuffer[n+2];

                for(int i=1;i<=n;i++)
                                str2[i]=new StringBuffer();
                for(int i=1;i<=n;i++)
                {
                System.out.println("\n Enter key value : " +i+ ":");
                int key=Integer.parseInt(b.readLine());
                for(int j=i-1;j<str.length();j+=n)
                                str2[key].append(str1.charAt(j));
                }
                for(int i=1;i<=n;i++)
                                System.out.println(str2[i]);
                }
}


ENRYPTION AND DECRYPTION USING ONE TIMEPAD


import java.io.*;
import java.math.*;
import java.util.*;
class Onetimepad
{
        public static void main(String args[])throws Exception
        {
                BufferedReader dis=new BufferedReader(new InputStreamReader(System.in));
                Random randomgenerator=new Random();
                String temp=" ";
                System.out.print("Enter PLAIN TEXT: \n");
                temp=dis.readLine();
                temp=temp.toUpperCase();
                int length=temp.length();
                char plaintext[]=new char[length];
                char key[]=new char[length];
                char ciphertext[]=new char[length];
                char deciphertext[]=new char[length];
                for(int i=0;i<length;i++)
                {
                        plaintext[i]=temp.charAt(i);
                        key[i]=(char)(65+randomgenerator.nextInt(26));
                        ciphertext[i]=(char)(((int)plaintext[i])^((int)key[i]));
                        deciphertext[i]=(char)(((int)ciphertext[i])^((int)key[i]));
                }
                System.out.println("PLAIN TEXT : ");
                for(int i=0;i<length;i++)
                        System.out.print(" "+plaintext[i]);
                System.out.println("\n\nKEY: \n");
                for(int i=0;i<length;i++)
                        System.out.print(" "+key[i]);
                System.out.println("\n\nCIPHER TEXT : \n");
                for(int i=0;i<length;i++)
                        System.out.print(" "+ciphertext[i]);
                System.out.println("\n\nDECIPHER TEXT : \n");
                for(int i=0;i<length;i++)
                        System.out.print(" "+deciphertext[i]);
        }
}


Output:



C:\>javac Onetimepad.java

C:\>java Onetimepad

Enter PLAIN TEXT: character stuffing
PLAIN TEXT:
C H A R A C T E R   S T U F F I N G

KEY:

J R Q L C T P P I G M S D G Y Z M J

CIPHER TEXT:

    § g  

DECIPHER TEXT:

C H A R A C T E R   S T U F F I N G

//RSA
import java.io.*;
import static java.lang.Math.*;
class rsa
{
  public static void main(String[]args)throws IOException
  {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("enter two prime numbers");
        int p=Integer.parseInt(br.readLine());
                int q=Integer.parseInt(br.readLine());
                int n=(int)(p*q);
                int d;
                System.out.println("enter e value");
                int e=Integer.parseInt(br.readLine());
                for(int i=2;;i++)
                {
                  if((e*i) % ((p-1)*(q-1))==1)
                   {
                                d=i;
                                break;  
                    }
                 }
                int ptext=4;
                int c=(int)((long)(pow(ptext,e))%(n));  
                System.out.println("Cipher text is" +c);
                int pt=(int)((long)(pow(c,d))%(n));
                System.out.println("plain text:"+pt);
   }
}
               
               

/*OUTPUT:

D:\sre>java rsa
enter two prime numbers
5
7
enter e value
11
Cipher text is9
plain text:4

*/
//ROUTING USING FLOODING
import java.io.*;
class weightedgraph
{
  int size;
  int adjmat[][];
  int b[];
    weightedgraph(int a[][],int n)
  {
size=n;
b=new int[30];
adjmat=new int[size][size];
for(int i=0;i<size;i++)
for(int j=0;j<size;j++)
adjmat[i][j]=a[i][j];
b[0]=123;
}
public void shortestpath()
{
int i,s;
int min;
int v,w;
boolean found[]=new boolean[size];
int d[]=new int[size];
found[0]=true;
d[0]=0;
for(v=1;v<size;v++)
{
  found[v]=false;
  d[v]=adjmat[0][v];
}
for(i=1;i<size;i++)
{
  min=99999;
  for(w=1;w<size;w++)
 {
if(!found[w]&&d[w]<min)
{
                   v=w;
   min=d[w];
}
 }
 found[v]=true;
 b[v]=123;


for(w=1;w<size;w++)
 if(!found[w])
 if(min+adjmat[v][w]<d[w])
 d[w]=min+adjmat[v][w];
}
System.out.println("Shortest path from vertex 0 to other vertices: ");
for(i=1;i<size;i++)
 System.out.println("0->"+i+":"+d[i]);
for(i=1;i<size;i++)
 System.out.println("message at node"+i+"is:"+b[i]);
        }
}
class flooding
{
public static void main(String args[])throws Exception
{
final int INF=99999;
int a[][]={
             {INF,2,3,6,INF},
                 {2,INF,4,1,1},
             {3,4,INF,INF,2},
             {INF,1,INF,INF,1},
             {INF,1,2,1,INF},
          };
                weightedgraph wg=new weightedgraph(a,5);
                wg.shortestpath();         
   }
}
               
/*OUTPUT:

D:\sre>javac flooding.java

D:\sre>java flooding
Shortest path from vertex 0 to other vertices:
0->1:2
0->2:3
0->3:3
0->4:3
message at node1is:123
message at node2is:123
message at node3is:123
message at node4is:123

*/















/* OUTPUT  

D:\sre>javac Tra.java

D:\sre>java Tra

 Enter a line to encode:
WELCOMETOJBICT

 Enter number of keys :
3

 Enter key value : 1:
3

 Enter key value : 2:
2

 Enter key value : 3:
1

OBCJ
LOETT
WECMI
               
*/