Switch to full style
Project under GPL source codes are posted here
Post a reply

Steganongrapy using Audio

Fri Oct 17, 2008 1:07 am

* Project Name:   Steganongrapy using Audio
* Programmer:   Langesh
* Type:   Java Swing
* Technology:  Java
* IDE:   Any
* Description:   In this project, the message is encoded with audio file for the secure transfer.
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
import sun.audio.*;
import java.applet.*;
import java.math.*;

class mainframe extends JFrame implements ActionListener,Runnable
{
  JLabel Lfilename,Lmessage,Ldesign,Ltitle;
  JButton Bplay,Bopen,Bsave,Bstop,Bencrypt,Bdecrypt,Bsend,Bclear;
  JTextArea Amessage;
  JTextField Tfilename;
  Icon Iplay,Iopen,Istop,Isave;
  String Ekey,Dkey,address,name;
  JFileChooser filechooser;
  File Ofilename,Sfilename,tempfilename;
  InetAddress ipaddress;
  int Copened,Cencrypt,Cdecrypt,Cplay,Cstop,Csave;
  InputStream ins;
  AudioStream as;
  Thread t;

  public mainframe()throws Exception
   {

    // frame

    super("Swathe 1.0 - Steganography Using Audio");
    Container con=getContentPane();
    con.setLayout(null);

    // Basic

    Copened=0;
    Cencrypt=0;
    Cdecrypt=0;
    Cplay=0;
    Csave=0;
    Cstop=0;

    t=new Thread(this);
    t.start();

    // Icons

    Iplay=new ImageIcon("c:\Icon\play.gif");
    Isave=new ImageIcon("c:\Icon\save.gif");
    Iopen=new ImageIcon("c:\Icon\open.gif");
    Istop=new ImageIcon("c:\Icon\stop1.gif");

    // file chooser

    filechooser=new JFileChooser();
    filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);

    // comp

    Ltitle=new JLabel("Steganography Using Audio");
    Ldesign=new JLabel("Designed By : M.Dayananthan, D.Langesh,
M.Vanitha");
    Lfilename=new JLabel("File Name ");
    Lmessage=new JLabel("Message  ");
    Bplay=new JButton("",Iplay);
    Bopen=new JButton("",Iopen);
    Bsave=new JButton("",Isave);
    Bstop=new JButton("",Istop);
    Bclear=new JButton("Clear");
    Bencrypt=new JButton("Encoding");
    Bdecrypt=new JButton("Decoding");
    Bsend=new JButton("Send");
    Amessage=new JTextArea();
    Tfilename=new JTextField();

    // tool tips

    Tfilename.setToolTipText("Opened filename");
    Bplay.setToolTipText("play");
    Bopen.setToolTipText("open");
    Bsave.setToolTipText("save");
    Bstop.setToolTipText("stop");

    Tfilename.setEditable(false);

    // Bounds

    Ltitle.setBounds(300,30,250,25);
    Lfilename.setBounds(100,100,100,25);
    Tfilename.setBounds(100,125,230,25);
    Lmessage.setBounds(450,100,100,25);
    Amessage.setBounds(450,125,300,220);
    Bclear.setBounds(450,370,80,22);
    Bplay.setBounds(100,200,50,25);
    Bstop.setBounds(160,200,50,25);
    Bopen.setBounds(220,200,50,25);
    Bsave.setBounds(280,200,50,25);
    Bencrypt.setBounds(100,250,110,25);
    Bdecrypt.setBounds(220,250,110,25);
    Bsend.setBounds(160,300,110,25);
    Ldesign.setBounds(350,420,400,50);


    // add

    con.add(Ltitle);
    con.add(Ldesign);
    con.add(Lfilename);
    con.add(Tfilename);
    con.add(Lmessage);
    con.add(Amessage);
    con.add(Bclear);
    con.add(Bplay);
    con.add(Bopen);
    con.add(Bsave);
    con.add(Bstop);
    con.add(Bencrypt);
    con.add(Bdecrypt);
    con.add(Bsend);

    // actionListener

    Bclear.addActionListener(this);
    Bplay.addActionListener(this);
    Bopen.addActionListener(this);
    Bsave.addActionListener(this);
    Bstop.addActionListener(this);
    Bencrypt.addActionListener(this);
    Bdecrypt.addActionListener(this);
    Bsend.addActionListener(this);

   } // constr of mainframe

  public void run()
   {
    try
     {
      recv r=new recv();
     }
    catch(Exception e)
     {
      System.out.println(e);
     }
   }

  public void Audioencrypt(String message,File file,int key) throws
Exception
   {
    byte b[]=new byte[1];
    BigInteger Abi,Mbi;
    int k,k1;
    InputStream ins=new FileInputStream(file);
    OutputStream outs=new FileOutputStream(new File("d:\temp.wav"));
    for(int c=0;c<key;c++)
     {
      int ch=ins.read();
      outs.write(ch);
     }
    int len=message.length();
    byte mess[]=new byte[1];
    char chmess[]=new char[len+1];
    k=k1=0;
    for(int i=0;i<=len;i++)
     {
      message.getChars(0,len,chmess,0);
      if(i==0)
       {
        BigDecimal bd=new BigDecimal(len);
        BigInteger Blen=bd.toBigInteger();
        String Slen=Blen.toString(2);
        char Clen[]=new char[Blen.bitLength()];
        Slen.getChars(0,Blen.bitLength(),Clen,0);
        for(int j=0;j<=7;j++)
         {
          if(j==0)
           {
            for(k=0;k<8-Blen.bitLength();k++)
             {
              int n=ins.read(b);
              Abi=new BigInteger(b);
              String Aby=Abi.toString(2);
              int Alen=Abi.bitLength();
              if(b[0]<0)
                Alen++;
              char Ach[]=new char[Alen+1];
              Aby.getChars(0,Alen,Ach,0);

         if(b[0]==0)
          {
          }
         else
          {
              if(Ach[Alen-1]=='1')
               {
                if(Alen==Abi.bitLength())
       {
                  BigInteger bi=new BigInteger("11111110",2);
                  BigInteger big=Abi.and(bi);
        b=big.toByteArray();
       }
      else
       {
                       BigInteger bi=new BigInteger("-1",2);
                     BigInteger big=Abi.subtract(bi);
        b=big.toByteArray();
       }
               }
      outs.write(b);
            }
           }  //for loop k
         j=j+k-1;
         } // if of j
          else
            {
             int n=ins.read(b);
             Abi=new BigInteger(b);
             String Aby=Abi.toString(2);
             int Alen=Abi.bitLength();
                  if(b[0]<0)
                  Alen++;
             char Ach[]=new char[Alen+1];
             Aby.getChars(0,Alen,Ach,0);
            if(b[0]==0)
             {
                   Alen=1;
             }
               if(Clen[j-k]=='0' && Ach[Alen-1]=='1')
                {
                       if(Alen==Abi.bitLength())
                        {
                     BigInteger bi=new BigInteger("11111110",2);
                    BigInteger big=Abi.and(bi);
          b=big.toByteArray();
                        }
                       else
                        {
                       BigInteger bi=new BigInteger("-1",2);
                     BigInteger big=Abi.subtract(bi);
          b=big.toByteArray();
                        }
                     }
               else if(Clen[j-k]=='1' && Ach[Alen-1]=='0')
                {
                      if(Alen==Abi.bitLength())
          {
                   BigInteger bi=new BigInteger("1",2);
         BigInteger big=Abi.add(bi);
         b=big.toByteArray();
          }
                      else
          {
                   BigInteger bi=new BigInteger("-1",2);
         BigInteger big=Abi.add(bi);
         b=big.toByteArray();
          }

                }
                outs.write(b);
                 } // end else

           } // for loop j

        } // end of if

      else
       {
        String slen=String.valueOf(chmess[i-1]);
        byte blen[]=slen.getBytes();
        BigInteger Blen=new BigInteger(blen);
        String Slen=Blen.toString(2);
        char Clen[]=new char[Blen.bitLength()];
        Slen.getChars(0,Blen.bitLength(),Clen,0);
        for(int j=0;j<=7;j++)
         {
          if(j==0)
           {
            for(k1=0;k1<8-Blen.bitLength();k1++)
             {
              int n=ins.read(b);
              Abi=new BigInteger(b);
         String Aby=Abi.toString(2);
              int Alen=Abi.bitLength();
                  if(b[0]<0)
                  Alen++;
              char Ach[]=new char[Alen+1];
              Aby.getChars(0,Alen,Ach,0);
      if(b[0]==0)
             {

             }
         else
          {
                 if(Ach[Alen-1]=='1')
                  {
                        if(Alen==Abi.bitLength())
                         {
                     BigInteger bi=new BigInteger("11111110",2);
                     BigInteger big=Abi.and(bi);
           b=big.toByteArray();
                         }
                        else
                         {
                       BigInteger bi=new BigInteger("-1",2);
                     BigInteger big=Abi.subtract(bi);
           b=big.toByteArray();
                         }
                  }
          }
      outs.write(b);

              }  //for loop k

      j=j+k1-1;

             } // if of j

        else
         {
          int n=ins.read(b);
           Abi=new BigInteger(b);
              String Aby=Abi.toString(2);
              int Alen=Abi.bitLength();
                  if(b[0]<0)
                  Alen++;
              char Ach[]=new char[Alen+1];
              Aby.getChars(0,Alen,Ach,0);
            if(b[0]==0)
             {
         Alen=1;
             }

               if(Clen[j-k1]=='0' && Ach[Alen-1]=='1')
                {
         if(Alen==Abi.bitLength())
          {
                       BigInteger bi=new BigInteger("11111110",2);
                     BigInteger big=Abi.and(bi);
           b=big.toByteArray();
                         }
                        else
          {
                       BigInteger bi=new BigInteger("-1",2);
                     BigInteger big=Abi.subtract(bi);
           b=big.toByteArray();
                         }
                }
               else if(Clen[j-k1]=='1' && Ach[Alen-1]=='0')
                {
         if(Alen==Abi.bitLength())
          {
                  BigInteger bi=new BigInteger("1",2);
                     BigInteger big=Abi.add(bi);
           b=big.toByteArray();
          }
         else
          {
                  BigInteger bi=new BigInteger("-1",2);
                     BigInteger big=Abi.add(bi);
           b=big.toByteArray();
          }
                }
      outs.write(b);
         } // end else

       } // for loop j
     } // end of else

   } // for loop i

  while(true)
   {
    int i=ins.read();
    if(i==-1) break;
    outs.write(i);
   }
    ins.close();
    outs.close();
   }

public void Audiodecrypt(File filename,int key)throws Exception
{
  InputStream ins=new FileInputStream(filename);
  byte b[]=new byte[1];
  BigInteger bb1;
  char mess[]=new char[8];
  int c=0;
  for(int i=0;i<key;i++)
  {
   int n=ins.read();
  }
  for(int i=0;i<8;i++)
   {
    ins.read(b);
    bb1=new BigInteger(b);
    String str=bb1.toString(2);
    int len=bb1.bitLength();
    if(b[0]<0)
     len++;
    char ch[]=new char[len+1];
    str.getChars(0,len,ch,0);
    if(b[0]==0)
     mess[i]='0';
    else
     mess[i]=ch[len-1];
   }
  String dd=new String(mess);
  BigInteger bb=new BigInteger(dd,2);
  String s=bb.toString(2);
int l=bb.intValue();

char me[]=new char[l];
int count=0;

for(int m=0;m<l;m++)
{
for(int i=0;i<8;i++)
   {
    ins.read(b);
    bb1=new BigInteger(b);
    String str=bb1.toString(2);
    int len=bb1.bitLength();
    if(b[0]<0)
     len++;
    char ch[]=new char[len+1];
    str.getChars(0,len,ch,0);
    if(b[0]==0)
     mess[i]='0';
    else
     mess[i]=ch[len-1];
   }
  String dd1=new String(mess);
  BigInteger bb2=new BigInteger(dd1,2);
  String s1=bb2.toString(2);
int l1=bb2.intValue();
me[count]=(char)l1;
count++;
}

String message=new String(me);
Amessage.setText(message);
ins.close();

}

  public void actionPerformed(ActionEvent ae)
   {

   try
    {

// Action for encryption button

    if(ae.getSource()==Bencrypt)
     {
      if(Copened==1)
       {
        Ekey=JOptionPane.showInputDialog("Enter The Key For
Encryption");
//String type
        if(Ekey.trim().equals(""))
         JOptionPane.showMessageDialog(this,"Enter the
Key","Error",JOptionPane.ERROR_MESSAGE);
        else
         {
          // encrypt the message
          int key=Integer.parseInt(Ekey);
          Audioencrypt(Amessage.getText(),Ofilename,key);
          Cencrypt=1;
         }
       }
      else
       {
        JOptionPane.showMessageDialog(this,"File Not
Opened","Error",JOptionPane.ERROR_MESSAGE);
       }
     } // end of Bencrypt

// Action for Clear button

    else if(ae.getSource()==Bclear)
     {
      Amessage.setText("");
     } // end of clear button

// Action for Decrypt button

    else if(ae.getSource()==Bdecrypt)
     {
      if(Copened==1)
       {
        Dkey=JOptionPane.showInputDialog("Enter The Key For
Decryption");
//String type
        if(Dkey.trim().equals(""))
         JOptionPane.showMessageDialog(this,"Enter the
Key","Error",JOptionPane.ERROR_MESSAGE);
        else
         {
         // decrypt message
          int key=Integer.parseInt(Dkey);
         Audiodecrypt(Ofilename,key);
         Cdecrypt=1;
         }
       }
      else
       JOptionPane.showMessageDialog(this,"File Not
Opened","Error",JOptionPane.ERROR_MESSAGE);
     } // end of Decrypt button

// Action for Play button

    else if(ae.getSource()==Bplay)
     {
      if(Copened==1)
       {

         ins=new FileInputStream(Ofilename);
         as=new AudioStream(ins);
         AudioPlayer.player.start(as);
         Cplay=1;
         Cstop=0;

       } // start playing

      else
       JOptionPane.showMessageDialog(this,"File Not
Opened","Error",JOptionPane.ERROR_MESSAGE);

     } // end of play button



// Action for Stop button

    else if(ae.getSource()==Bstop)
     {

      if(Cplay==1)
       {

        Cplay=0;
        Cstop=1;
        AudioPlayer.player.stop(as);

       } // stop plaing

      else

       JOptionPane.showMessageDialog(this,"No Audio Is
playing","Error",JOptionPane.ERROR_MESSAGE);

     } // end of stop button



// Action for open Button

    else if(ae.getSource()==Bopen)
     {
      int r=filechooser.showOpenDialog(this);
      tempfilename=filechooser.getSelectedFile(); //File type
      if(r==JFileChooser.CANCEL_OPTION)
       JOptionPane.showMessageDialog(this,"File Not
Selected","Error",JOptionPane.ERROR_MESSAGE);
      else
       {
        name=tempfilename.getName();

        if(!(name.endsWith(".wav")))

          JOptionPane.showMessageDialog(this,"Select Only
Wav","Error",JOptionPane.ERROR_MESSAGE);

        else
          {
            Copened=1;
            Ofilename=tempfilename;
            Tfilename.setEditable(true);
            Tfilename.setText(name);
            Tfilename.setEditable(false);
           }

         }
     }   // end of Open button

// Action for Save Button

    else if(ae.getSource()==Bsave)
     {
      if(Copened==1 && Cencrypt==1 || Cdecrypt==1)
       {
        int r=filechooser.showSaveDialog(this);
        Sfilename=filechooser.getSelectedFile(); //File type
        InputStream in=new FileInputStream("d:\temp.wav");
        OutputStream out=new FileOutputStream(Sfilename);
        Ofilename=Sfilename;
   name=Sfilename.getName();
        Tfilename.setEditable(true);
        Tfilename.setText(name);
        Tfilename.setEditable(false);
        while(true)
         {
          int i=in.read();
          if(i==-1) break;
          out.write(i);
         }
       in.close();
       out.close();
       }
      else
       {
        String s;
        if(Copened==0)
         s="File not Opened";
        else if(Cencrypt==0)
         s="Not Encrypted";
        else
         s="Not Decrypted";

JOptionPane.showMessageDialog(this,s,"Error",JOptionPane.ERROR_MESSAGE);
       }
     } // end of save button

// Action for send button

    else if(ae.getSource()==Bsend)
     {
      if(Copened==1 && Cencrypt==1)
       {
        address=JOptionPane.showInputDialog("Enter The IPaddress");
        ipaddress=InetAddress.getByName(address);
        Socket socket=new Socket(ipaddress,6000);
        OutputStream out=socket.getOutputStream();
        InputStream in=new FileInputStream(Ofilename);
        while(true)
         {
          int i=in.read();
          if(i==-1) break;
          out.write(i);
         }
         in.close();
         out.close();
       }
      else
       {
        String s;
        if(Copened==1)
          s="Encryption not done";
        else
          s="Open the File first";

JOptionPane.showMessageDialog(this,s,"Error",JOptionPane.ERROR_MESSAGE);
       }
     }

    } // end try
    catch(Exception e)
     {
     //
JOptionPane.showMessageDialog(this,e,"Error",JOptionPane.ERROR_MESSAGE);
     }

   } // end of actionperformed

}//end of class


class recv extends JFrame implements Runnable
{
   JFileChooser fc;
   ServerSocket ss;
   Socket s;
   InputStream ins;
   OutputStream out;
   byte b[];
   int len;

  public recv() throws Exception
    {

      b=new byte[100];
      fc=new JFileChooser();
      fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
      ss=new ServerSocket(6000);
      torun();
    }
  public void torun() throws Exception
   {
      while(true)
       {
        s=ss.accept();
        ins=s.getInputStream();
        String str="Your have Receive An AudioFile.
Save them";

JOptionPane.showMessageDialog(this,str,"Information",JOptionPane.INFORMATI
ON_MESSAGE);
        int r=fc.showSaveDialog(this);
        File file=fc.getSelectedFile();
        out=new FileOutputStream(file);
        Thread t=new Thread(this);
        t.start();
       }
    }
   public void run()
    {
      try
        {
         while(true)
          {
           int n=ins.read();
      if(n==-1) break;
           out.write(n);
          }
       //  s.close();
         ins.close();
         out.close();
        }
      catch(Exception e)
        {
           System.out.println(e);
        }
    } // end of run
} //end of class




public class techmeet1
{
  public static void main(String arg[])throws Exception
   {
    mainframe frame=new mainframe();
    frame.setSize(800,600);
    frame.setVisible(true);


    frame.addWindowListener( new WindowAdapter()
     {
      public void windowClosing(WindowEvent we)
       {
        System.exit(0);
       }
     });

   } // end of main

} // end of class




Re: Steganongrapy using Audio

Fri Mar 20, 2009 4:36 pm

how to execute the steganography using audio project

Post a reply
  Related Posts  to : Steganongrapy using Audio
 Sending and playing microphone audio over network     -  
 play a sound when the user enters the area- audio feedback     -  

Topic Tags

Java Swing, Java Sound