SlideShare uma empresa Scribd logo
1 de 53
Baixar para ler offline
“Image and Audio Steganography”
B.Tech Project Report
Submitted in partial fulfillment of the requirements for the degree of
Bachelor of Technology, Computer Science and Engineering
Submitted By:
Rohit Jaiswal
CSE – 06000025
SUPERVISOR:
Mr. Rajeev Srivastava
(Reader)
Department of Computer Science and Engineering
Institute of Technology
Banaras Hindu University, Varanasi - 221005
DEPARTMENT OF COMPUTER ENGINEERING
INSTITUTE OF TECHNOLOGY
BANARAS HINDU UNIVERSITY
Varanasi – 221005, INDIA
Rajeev Srivastava
Reader
Computer Science and Engineering
Ref. No. IT/CSE/2007-08/ Dated: ______________
CERTIFICATE
This is to certify that Rohit Jaiswal ( Roll no. 06000025), student of the
Department of Computer Science & Engineering , Institute of
Technology, Banaras Hindu University, Varanasi worked for his
B.Tech. Minor Project entitled “Image and Audio Steganography”
under my supervision from beginning of fourth semester of B.Tech.
program 2006-2010.
The report submitted by him embodies the literature from various
reputed resources and is an authentic record of the work carried out by
them under my supervision and guidance.
(Rajeev Srivastava)
Reader
Department of Computer Science & Engineering
Institute Of Technology
Banaras Hindu University
Page | 2
ACKNOWLEDGEMENT
It has indeed been a great privilege for me to have Mr. Rajeev Srivastava,
Department of Computer Science and Engineering, Institute of Technology,
Banaras Hindu University, as my mentor for this project. His awe-inspiring
personality, superb guidance and constant encouragement are the motive force
behind this project work. I take this opportunity to express my utmost gratitude to
him. I am also indebted to him for his timely and valuable advice.
I am highly grateful to Prof. A.K.Tripathi, Head, Department of Computer
Science and Engineering, Institute of Technology, Banaras Hindu University for
providing necessary facilities and encouraging me during the course of work.
I am thankful to all technical and non-teaching staff of the Department of
Computer Science and Engineering for their constant assistance and co-operation.
( Rohit Jaiswal )
Roll No. : 06000025
B.Tech (Part II) Semester IV
Department of Computer Science & Engineering
Institute Of Technology ,Banaras Hindu University
Page | 3
Contents
1. Abstract ...........................................................................................................5
2. Chapter 1: Introduction.....................................................................................6
Steganography and Cryptography……………………………………...6
Scope of Steganography………………………………………………...7
3. Chapter 2: Technologies Used…….................................................................8
Visual C#.NET 8.0 or higher……………………………………………8
Macromedia Flash 8……………………………………………………..8
4. Chapter 3: Theoretical Background……..........................................................9
Analysis of Digital Image………………………………………………...9
Analysis of Digital Audio………………………………………………..12
5. Chapter 4: Analysis and Design….……….......................................................14
Context Diagram………………………………………………………...14
Data Flow Diagram.........................................................................15
Encoding………………………………………………………….15
Decoding………………………………………………………….16
6. Chapter 5. Algorithms………………………………………………………………17
7. Chapter 6: Software Implementation……........................................................23
Functions…………………………………………………………………23
Functions Map…………………………………………………………..24
8. Chapter 7: Inputs and Outputs………….........................................................25
9. Chapter 8:Conclusion and Future Work...........................................................34
8. References......................................................................................................35
9. Appendix…………………………......................................................................36
Keywords……………...……………………………………………………….36
Source Code............................................................................................37
Page | 4
ABSTRACT
Steganography is the art and science of writing hidden messages in such
a way that no one apart from the sender and intended recipient even
realizes there is a hidden message.
There are often cases when it is not possible to send messages openly or in
encrypted form. This is where steganography can come into play. While
cryptography provides privacy, steganography is intended to provide secrecy.
This project deals with hiding of text behind multimedia, i.e. digital images,
wave audio, real media audio, etc. Cryptographic cipher is used before hiding text
to make this procedure more secure. The GUI has been given a funky look by
using flash.
IMPORTANT KEYWORDS
Steganography , Cryptography, Cover Medium , Plain Text, Cipher
Text, Stego Key, Stego Medium
Page | 5
Introduction
The word steganography is of Greek origin and means "covered, or hidden
writing". Steganography is the art and science of communicating in a way which
hides the existence of the communication. By contrast, cryptography obscures the
meaning of a message, but it does not conceal the fact that there is a message.
Steganography and Cryptography
Cryptography — the science of writing in secret codes — addresses all of the
elements necessary for secure communication over an insecure channel, namely
privacy, confidentiality, key exchange, authentication, and non-repudiation. But
cryptography does not always provide safe communication. Consider an
environment where the very use of encrypted messages causes suspicion. Consider
the following text file; what else is it likely to be if not encrypted?
qANQR1DBwU4D/TlT68XXuiUQCADfj2o4b4aFYBcWumA7hR1Wvz9rbv2BR6WbEUsy
ZBIEFtjyqCd96qF38sp9IQiJIKlNaZfx2GLRWikPZwchUXxB+AA5+lqsG/ELBvRa
c9XefaYpbbAZ6z6LkOQ+eE0XASe7aEEPfdxvZZT37dVyiyxuBBRYNLN8Bphdr2zv
z/9Ak4/OLnLiJRk05/2UNE5Z0a+3lcvITMmfGajvRhkXqocavPOKiin3hv7+Vx88
uLLem2/fQHZhGcQvkqZVqXx8SmNw5gzuvwjV1WHj9muDGBY0MkjiZIRI7azWnoU9
3KCnmpR60VO4rDRAS5uGl9fioSvze+q8XqxubaNsgdKkoD+tB/4u4c4tznLfw1L2
YBS+dzFDw5desMFSo7JkecAS4NB9jAu9K+f7PTAsesCBNETDd49BTOFFTWWavAfE
gLYcPrcn4s3EriUgvL3OzPR4P1chNu6sa3ZJkTBbriDoA3VpnqG3hxqfNyOlqAka
mJJuQ53Ob9ThaFH8YcE/VqUFdw+bQtrAJ6NpjIxi/x0FfOInhC/bBw7pDLXBFNaX
HdlLQRPQdrmnWskKznOSarxq4GjpRTQo4hpCRJJ5aU7tZO9HPTZXFG6iRIT0wa47
AR5nvkEKoIAjW5HaDKiJriuWLdtN4OXecWvxFsjR32ebz76U8aLpAK87GZEyTzBx
dV+lH0hwyT/y1cZQ/E5USePP4oKWF4uqquPee1OPeFMBo4CvuGyhZXD/18Ft/53Y
WIebvdiCqsOoabK3jEfdGExce63zDI0=
=MpRf
The message above is a sentence in English that is encrypted using Pretty Good Privacy (PGP),
probably the most commonly used e-mail encryption software today.
The advantage of steganography over cryptography alone is that messages do not
attract attention to themselves, to messengers, or to recipients. Whereas the goal of
cryptography is to make data unreadable by a third party, the goal of
steganography is to hide the data from a third party. Often, steganography and
cryptography are used together to ensure security of the covert message.
Page | 6
CHAPTER 1
SCOPE OF STEGANOGRAPHY
Steganography is a very interesting and advantageous science these days and has
following uses:
 Digital Watermarking
To protect a copyright on information. Photo collections, sold on CD,
often have hidden messages in the photos which allow detection of
unauthorized use. The same technique applied to DVDs is even more
effective, since the industry builds DVD recorders to detect and disallow
copying of protected DVDs.
 The simplest and oldest are used in map making, where cartographers
sometimes add a tiny fictional street to their maps, allowing them to
prosecute copycats.
 A similar trick is to add fictional names to mailing lists as a check
against unauthorized resellers.
 Steganography doesn't just apply to written forms of communication. Radio
and TV messages, from World War II to today, can be used to hide coded
or hidden messages. Some government sources suspect that Osama bin
Laden's pre-recorded videos that are re-played on TV stations around the
world contain hidden messages.
 Even biological data, stored on DNA, may be a candidate for hidden
messages, as biotech companies seek to prevent unauthorized use of their
genetically engineered material. The technology is already in place for
this: three New York researchers successfully hid a secret message in a
DNA sequence and sent it across the country.
 Steganography can also be used to allow communication within an
underground community.
 Steganography is used by some modern printers, including HP and Xerox
brand color laser printers. Tiny yellow dots are added to each page. The
dots are barely visible and contain encoded printer serial numbers, as well
as date and time stamps.
Page | 7
TECHNOLOGIES USED
 Visual Studio.NET version 2.0 or higher or Visual C#.NET 8.0 or higher
C# is an object-oriented programming language developed by Microsoft as
part of the .NET initiative and later approved as a standard by ECMA (ECMA-
334) and ISO (ISO/IEC 23270). Anders Hejlsberg leads development of the
C# language, which has a procedural, object-oriented syntax based on C++
and includes influences from aspects of several other programming
languages (most notably Delphi and Java) with a particular emphasis on
simplification.
In this project all the framework has been designed in C#. It deals with the
main Algorithms of this project.
 Macromedia Flash Professional 8.0
Flash is commonly used to create animation, advertisements, various web
page components, to integrate video into web pages, and more recently, to
develop rich Internet applications. Files in the SWF (pronounced: Swif)
format, traditionally called "Flash movies" or "Flash games", usually have a
.swf file extension and may be an object of a web page, strictly "played" in a
standalone Flash Player, or incorporated into a Projector, a self-executing
Flash movie (with the .exe extension in Microsoft Windows).
In this project Flash has been used to give the application a stylish look and
some animaions. The SWF movies has been associated with the basic
platform of C# and has become the background of GUI.
Page | 8
.EXE file
( built in C#)
Functions
( built in C#)
.SWF file
( built in Flash)
CHAPTER 2
THEORETICAL BACKGROUND
ANALYSIS OF DIGITAL IMAGE
An image file is merely a binary file containing a binary representation of
the color or light intensity of each picture element (pixel) comprising the image.
Images typically use either 8-bit or 24-bit color.
When using 8-bit color, there is a definition of up to 256 colors forming a
palette for this image, each color denoted by an 8-bit value.
A 24-bit color scheme, as the term suggests, uses 24 bits per pixel and
provides a much better set of colors. In this case, each pixel is represented by three
bytes, each byte representing the intensity of the three primary colors red, green,
and blue (RGB), respectively. The color orange, for example, would be displayed
with red set to 100% , green set to 50% and no blue .
The size of an image file, then, is directly related to the number of pixels
and the granularity of the color definition. A typical 640x480 pix image using a
palette of 256 colors would require a file about 307 KB in size (640 • 480 bytes),
whereas a 1024x768 pix high-resolution 24-bit color image would result in a 2.36
MB file (1024 • 768 • 3 bytes).
To avoid sending files of this enormous size, a number of compression schemes
have been developed over time, notably Bitmap (BMP), Graphic Interchange
Format (GIF), and Joint Photographic Experts Group (JPEG) file types. Not
all are equally suited to steganography, however.
GIF and 8-bit BMP files employ what is known as lossless compression, a
scheme that allows the software to exactly reconstruct the original image. JPEG,
on the other hand, uses lossy compression, which means that the expanded image
Page | 9
CHAPTER 3
is very nearly the same as the original but not an exact duplicate. Lossless
compression is much better suited to applications where the integrity of the
original information must be maintained, such as steganography. While JPEG can
be used for stego applications, it is more common to embed data in GIF or BMP
files.
The simplest approach to hiding data within an image file is called Least
Significant Bit (LSB) insertion. In this method, we can take the binary
representation of the hidden_data and overwrite the LSB of each byte within the
cover_image. If we are using 24-bit color, the amount of change will be minimal
and indiscernible to the human eye. As an example, suppose that we have three
adjacent pixels (nine bytes) with the following RGB encoding:
10010101 00001101 11001001
10010110 00001111 11001010
10011111 00010000 11001011
Now suppose we want to "hide" the following 9 bits of data (the hidden data
is usually compressed prior to being hidden): 101101101. If we overlay these 9 bits
over the LSB of the 9 bytes above, we get the following (where bits in bold have
been changed):
10010101 00001100 11001001
10010111 00001110 11001011
10011111 00010000 11001011
Note that we have successfully hidden 9 bits but at a cost of only changing
4, or roughly 50%, of the LSBs.
A 640x480 pixel image, the size of a small computer monitor, can hold over
400,000 characters. That's a whole novel hidden in one modest photo! This poject
involves following formats of images:
Bitmap Images (.bmp)
Joint Photographic Experts Group (.jpg)
Portable Network Graphics (.png)
Tagged Image File Format (.tif)
Windows Meta Files (.wmf)
Page | 10
BMP Image File Format
File Header
Data Size(Bytes)
File Type(BM in case of BMP files) 2
File Size 4
Reserved Byte(Always 0) 1
Reserved Byte(Always 0) 1
Bf of Bits
Size of Info Header 4
Width of Bitmap 2
Height of Bitmap 2
No of planes(1 for BMP) 1
Bit Count(Bits/Pixel, Must be 1, 4, 8, 24) 1
Type of Compression used(none) 2
Size of Image Data in Bytes 2
Horizontal Resolution in Pixels/Meter 2
Vertical Resolution in Pixels/Meter 2
No of Color’s Indexes Used 2
Important Color Indexes 2
Reading Pixel Values
Data Size(Bytes)
R(Red) 1
B(Blue) 1
G(Green) 1
Reserved Word for RGB 1
Page | 11
ANALYSIS OF DIGITAL AUDIO
Digital audio differs from traditional analog sound in that it is a discrete
rather than continuous signal. A discrete signal is created by sampling a continuous
analog signal at a specified rate. For example, the standard sampling rate for CD
digital audio is about 44kHz. The following figure illustrates a continuous analog
sound wave being sampled to produce digital audio. Note the sinusoidal nature of a
sound wave.
We emphasize the discrete nature of a digital signal in the diagram.
However, standard sampling rates are usually set at a level where the resultant
digital signal is visually indistinguishable from the original analog signal.
Digital audio is stored on a computer as a sequence of 0's and 1's. With
the right tools, it is possible to change the individual bits that make up a digital
audio file. Such precise control allows changes to be made to the binary sequence
that are not discernible to the human ear. The secret message is embedded by
slightly altering the binary sequence of a sound file.
The key innovation in recent years was to choose an innocent looking cover
that contains plenty of random information, called white noise. You can hear white
noise as a the nearly silent hiss of a blank tape playing. The secret message
replaces the white noise, and if done properly it will appear to be as random as the
noise was. Thus the basic design principle of steganographic systems is
“replacing high entropy noise with a high entropy secret transmission” .
Page | 12
Wave File Format
Wave Header
Data Size(Bytes)
Header Name(RIFF) 4
File Size 4
Format Name(wave) 4
Key Word(fmt) 4
Channels(Mono = 1, Stereo = 2) 1
Frequency 4
Blank(Less Important Data) 6
Bit Resolution 1
Blank(Less Important Data) 12
Wave Data
Data Size(Bytes)
Sound Length 1
Frequency 1
Sample Data Rest Of Wave File
Page | 13
ANALYSIS AND DESIGN
CONTEXT DIAGRAM
Page | 14
COVER MEDIUM
(Image or Audio File)
PLAIN TEXT OR
TEXT FILE
(Text to be Hidden)
STEGNO KEY
STEGNO-ENCODING
TOOL
STEGNO
MEDIUM
STEGNO-DECODING
TOOL
.DAT FILE
CONTAINING
HIDDEN TEXT
CHAPTER 4
DATA FLOW DIAGRAM
ENCODING
Page | 15
STEGNO
KEY
Arithmetic
coding
Key
Information
PLAIN
TEXT
Vigenere
Cipher
Encripted
Text
Conversion
into ASCII
form
Bit
Stream
COVER
MEDIUM
Read the Image in
RGB values of
pixel in Bit form
Read the Audio in
Frequency Values
in Byte form
Conversion
into 8-bit
form
Using Key
Information Encode
Bit Stream in the
Bit/Byte Stream of
Cover Medium
STEGNO
MEDIUM
Resultant
Bit/ Byte Stream
DECODING
Page | 16
Arithmetic
coding Key
Information
Vigenere
Cipher
Encripted
Text
Conversion
into ASCII
form
Bit Stream of
Hidden Text
Conversion
into 8-bit
form
ORIGINAL
TEXT
STEGNO
KEY
STEGNO
MEDIUM
Read the Audio in
Frequency Values
in Byte form
Read the Image in
RGB values of
pixel in Bit form
Using Key
Information
Decode Bit
Stream in the
Bit/Byte Stream
ALGORITHMS
ENCODING
Least significant bit (LSB) coding is the simplest way to embed information in a
digital Image or Audio file. By substituting the least significant bit of each
sampling point in Audio and each pixel in Image with a binary message, LSB
coding allows for a large amount of data to be encoded.
The following diagram illustrates how the message 'HEY' is encoded in a
16-bit CD quality sample using the LSB method:
In LSB coding, the ideal data transmission rate is 1 kbps per 1 kHZ.
Page | 17
CHAPTER 5
ALGORITHM FOR ENCODING
STEP 1. //Information from Stegno Key
Input the key in string datatype;
//Apply Arithmetic coding to the string key
float num = Arithmetic_coding( key);
num=num*100;
x=10*(1st
digit of num);
y=10*(2st
digit of num);
STEP 2. //converting Plain Text into Bit Stream
//Input Text to be hidden in string datatype;
string plaintext;
//apply encription algorithm on this string
string ciphertext = Vigenere_cipher(plaintext);
convert ciphertext ASCII form;
convert ASCII form Bit_stream;
STEP 3. //Hiding bitstream of input text in Image or Audio file
int n = length(plaintext);
//HIDING IN IMAGE FILE
get_resolution( image )  pxq;
if (p==odd)
p=p-1;
if(q==odd)
q=q-1;
R value of 1x1 pixel = n;
int g =1;
int h=1;
int m= bit lodation in Bit_stream;
char C= R or G or B;
for(int i=0;i<8n;i++)
{
If (m%3==1) C=R;
If (m%3==1) C=G;
If (m%3==1) C=B;
Page | 18
Least significant digit of C value of (g+x)x(h+y) th pixel
= Bit_stream[i];
g = g+x;
h = h+y;
}
//HIDING IN AUDIO FILE
string audio_stream= sampled audio Byte_stream;
audio_stream[0]= n;
for(int i=0;i<8n;i++)
{
If (Bit_stream[i]==0)
audio_stream[i++]=audio_stream[i++] AND “11111110”;
If (Bit_stream[i]==1)
audio_stream[i]=audio_stream[i] OR “00000001”;
}
Page | 19
ALGORITHM FOR DECODING
STEP 1. //Information from Stegno Key
Input the key in string datatype;
//Apply Arithmetic coding to the string key
float num = Arithmetic_coding( key);
num=num*100;
x=10*(1st
digit of num);
y=10*(2st
digit of num);
//from IMAGE file
STEP 2. //read stegno image
int n= R value of 1x1 pixel
int g=0;
int h=0;
STEP 3. for(int i=1; i<=n;i++)
{
g=g+x;
h=h+y;
string Bit_stream;
char C;
If (i%3==1) C=R;
If (i%3==1) C=G;
If (i%3==1) C=B;
Bit_stream[i--]=least significant digit of C value of (gxh) pixel
}
// from Audio file
STEP 2. //read stegno audio
string audio_stream= sampled stegno audio Byte_stream;
int n = audio_stream[0];
Page | 20
STEP 3. for(int i=1;i<8n;i++)
{
Bit_stream[i]=least significant digit of audio_stream[i];
}
STEP 4. //converting Bit Stream into Plain Text
string ciphertext ;
convert Bit_stream  ASCII form;
convert ASCII form  ciphertext;
//apply dencription algorithm on this string
string plaintext = inverse_Vigenere_cipher(ciphertext);
PRINT plaintext;
Page | 21
Vigenere Cipher
Plain text: ATTACKATDAWN
Key: LEMONLEMONLE
Cipher text: LXFOPVEFRNHR
The person sending the message chooses a keyword and repeats it until it matches
the length of the plaintext, for example, the keyword "LEMON" makes :
Key: LEMONLEMONLE
Page | 22
IMPLEMENTATION
FUNCTIONS
 private void axShockwaveFlash1_FSCommand()
This functions is used to make connection between Flash GUI (i.e. SWF
movie) and C# codes. It also performs encoding and decoding operation for
audio medium.
 private void generate_bincodes()
It is used to convert the string into binary codes or bit stream.This function
uses the class stack to perform this task.
 private void text_encrypt()
It is used to encrypt the plain text using vigenere cipher.
 private string text_decrypt()
It is used to decrypt the text which is generated from the stegno medium.
 private float get_key()
This function is used to manipulate the stegno key.
 public Bitmap encrypt()
This is the function responsible for hiding encryted text in the image file
 public string decrypt()
This is the function responsible for decoding the stegno medium.
Page | 23
CHAPTER 6
FUNCTION MAP
Page | 24
EXE file
(built in
SWF file
(built in Flash)
axShockwav
eFlash1_FS
Command()
CLASS
DECODE
encrypt()
decrypt()
get_key()
CLASS
ENCODE
CLASS
Stegnos
text_
encrypt()
text_
decrypt()
gen_binary_
code()
CLASS
Stack
INPUTS AND OUTPUTS
ENCODING
Page | 25
CHAPTER 7
Page | 26
Page | 27
Page | 28
Page | 29
DECODING
Page | 30
Page | 31
Page | 32
CONCLUSION AND FUTURE WORK
Steganography is a really interesting subject and outside of the mainstream
cryptography and system administration that most of us deal with day after day.
“You never know if a message is hidden”, this is the dilemma that empowers
steganography. As more emphasis is placed on the areas of copyright protection,
privacy protection, and surveillance, we believe that steganography will continue
to grow in importance as a protection mechanism.
This project deals with Steganography in Image and Audio files using
Least Significant Bit (LSB) coding. This project can uplifted by
considering following measures:
 A more sophisticated approach can be implemented by using a
pseudo-random number generator to spread the message over
the sound file in a random manner.
 This project can be extended by using other media files like video and
other complex formats of audio and image.
Page | 33
CHAPTER 8
REFERENCES
 “Steganography: How to Send a Secret Message By Bryan Clair”
http://www.strangehorizons.com/2001/20011008/steganography.s
html
 “A detailed look at SteganographicTechniques and their use in an
Open-SystemsEnvironment”
http://www.scribd.com/word/full/20529?access_key=34h2xr3z7wokx
 Steganography from Wikipedia
http://en.wikipedia.org/wiki/Steganography
 Image Steganography and Steganalysis
http://www.ims.nus.edu.sg/Programs/imgsci/files/memon/sing_stego.pdf
 Microsoft Tutorials for C# Express edition
Page | 34
APPENDIX
KEYWORDS AND DEFINITIONS
Steganography: The art and science of hidden writing.
Cryptography : The science of writing in secret codes.
Cover Medium: file in which we will hide the hidden_data
Plain Text : Data to be hidden.
Cipher Text : The encrypted data to be hidden.
Stego Key : Data is hidden by using this string
Stego Medium : The final resultant file after hiding data.
Bit Stream : The binary code generated from the string.
Page | 35
SOURCE CODE
PROGRAM.CS
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Steganography
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Stegnos());
}
}
}
FORM1.CS
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Steganography
{
public partial class Stegnos : Form
{
public Stegnos()
{
InitializeComponent();
this.axShockwaveFlash1.FSCommand += new
AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEventHandler(axShockw
aveFlash1_FSCommand);
}
string code_text;
string myTextFile = "", myPassword = "", myText = "";
public string myImageFile = "";
int index=0;
string mybinarycode_final = "",myAudioFile="";
string final_text = "";
Page | 36
string sampleStr = "";
Stream outputstream;
int chkval = 0;
private void axShockwaveFlash1_FSCommand(object sender,
AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e)
{
if (e.command == "exit")
Application.Exit();
if (e.command == "password")
{
myPassword = e.args.ToString();
}
if (e.command == "savetextfile")
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Binary Files (*.dat)|*.dat";
if (dlg.ShowDialog() == DialogResult.OK)
{
StreamWriter fwriter = File.CreateText(dlg.FileName);
fwriter.WriteLine(final_text);
fwriter.Close();
}
}
if(e.command == "savedfile")
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Bitmap (*.bmp)|*.bmp|Portable Network Graphics
(*.png)|*.png|Tagged Image File Format (*.tif)|*.tif|Windows MetaFile
(*.wmf)|*.wmf|Windows Audio (*.wav)|*.wav";
if (dlg.ShowDialog() == DialogResult.OK)
{
System.Drawing.Imaging.ImageFormat format =
System.Drawing.Imaging.ImageFormat.Bmp;
if (dlg.FilterIndex == 2)
format = System.Drawing.Imaging.ImageFormat.Png;
if (dlg.FilterIndex == 3)
format = System.Drawing.Imaging.ImageFormat.Tiff;
if (dlg.FilterIndex == 4)
format = System.Drawing.Imaging.ImageFormat.Wmf;
if (dlg.FilterIndex == 5)
{
chkval = 1;
Page | 37
BinaryWriter messageWriter = new BinaryWriter(new
MemoryStream());
FileStream fs = new FileStream(myAudioFile,
FileMode.Open);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
messageWriter.Write(buffer);
messageWriter.Seek(0, SeekOrigin.Begin);
Stream WaveStream = messageWriter.BaseStream;
/*SaveFileDialog dlg1 = new SaveFileDialog();
dlg1.Filter = "wav|*.wav";
if (dlg1.ShowDialog() == DialogResult.OK)
{
StreamWriter fwriter =
File.CreateText(dlg1.FileName);
fwriter.Close();
}*/
outputstream = new FileStream(dlg.FileName,
FileMode.Create);
BinaryWriter writer = new BinaryWriter(outputstream);
String str = "";
byte[] ch = new byte[100];
WaveStream.Read(ch, 0, 100);
writer.Write(ch);
generate_bincodes();
char[] message = mybinarycode_final.ToCharArray();
int messageLength = mybinarycode_final.Length;
int msglnth = messageLength;
byte[] newByte = new byte[1];
int sampleint = 4;
int count = 0;
int messagecount = 0;
//int streamcount = 44;
for(int i=0;i<6;i++)
{
WaveStream.Read(ch, 0, 1);
writer.Write((byte)(msglnth % 10));
msglnth = msglnth / 10;
}
float keygen = get_key(myPassword);
int advancesteps = (int)(keygen * 100);
if (advancesteps <50)
advancesteps = 50;
if ((fs.Length - 100) < messageLength * advancesteps)
{
MessageBox.Show("Audio File is too small to hide
this message");
Page | 38
Application.Exit();
}
while (messagecount < messageLength)
{
sampleint = WaveStream.ReadByte();
if (count % advancesteps == 0)
{
if (message[messagecount] == '1')
{
if (sampleint % 2 == 0 && sampleint < 255)
{
sampleint++;
}
else
sampleint = 255;
}
else if (messagecount < messageLength)
{
if (sampleint % 2 == 1 && sampleint < 255)
{
sampleint++;
}
else
sampleint = 254;
}
messagecount++;
}
count++;
writer.Write((byte)sampleint);
}
while ((sampleint = WaveStream.ReadByte()) >= 0)
{
writer.Write((byte)sampleint);
}
writer.Close();
}
if (chkval != 1)
{
Image img = new Bitmap(pictureBox1.Image);
this.SuspendLayout();
pictureBox1.Image.Dispose();
pictureBox1.Image = null;
this.ResumeLayout();
img.Save(dlg.FileName, format);
}
}
Page | 39
}
if (e.command == "decodeaudiofile")
{
BinaryWriter messageWriter = new BinaryWriter(new
MemoryStream());
FileStream fs = new FileStream(e.args, FileMode.Open);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
messageWriter.Write(buffer);
messageWriter.Seek(0, SeekOrigin.Begin);
Stream WaveStream = messageWriter.BaseStream;
byte[] header = new byte[100];
WaveStream.Read(header, 0, 100);
String outputstr = "";
int count = 0;
int messagecount = 0;
float keygen = get_key(myPassword);
int advancesteps = (int)(keygen * 100);
if (advancesteps < 50)
advancesteps = 50;
int msglnth=0;
int pow=1;
for (int i = 0; i < 6; i++)
{
msglnth += WaveStream.ReadByte() * pow;
pow = pow * 10;
}
while (messagecount < msglnth)
{
int newdata = WaveStream.ReadByte();
if (count % advancesteps == 0)
{
if (newdata % 2 == 0)
outputstr += '0'.ToString();
else
outputstr += '1'.ToString();
messagecount++;
}
count++;
}
WaveStream.Close();
//MessageBox.Show(outputstr);
int length_text = outputstr.Length;
char[] original_val = outputstr.ToCharArray();
string coded_text = "";
int sum = 0;
for (int i = 0; i <= length_text - 7; i = i + 8)
{
sum = 0;
Page | 40
char[] binvalue = { '0', '0', '0', '0', '0', '0', '0', '0'
};
for (int j = 0; j <= 7; j++)
binvalue[j] = original_val[i + j];
for (int j = 0; j <= 7; j++)
{
sum += (binvalue[j] - 48) * (int)(Math.Pow((double)2,
(double)(7 - j)));
}
coded_text += ((char)sum).ToString();
}
final_text = text_decrypt(coded_text.Length,
myPassword.Length, coded_text.ToCharArray(), myPassword.ToCharArray());
}
if (e.command == "textfile")
{
myTextFile = e.args.ToString();
BinaryWriter messageWriter = new BinaryWriter(new
MemoryStream());
FileStream fs = new FileStream(e.args, FileMode.Open);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
messageWriter.Write(buffer);
messageWriter.Seek(0, SeekOrigin.Begin);
Stream MessageStream = messageWriter.BaseStream;
int MessageBuffer;
byte msg;
while ((MessageBuffer = MessageStream.ReadByte()) >= 0)
{
msg = (byte)MessageBuffer;
sampleStr += ((char)msg).ToString();
}
text_encrypt(sampleStr.Length, myPassword.Length,
sampleStr.ToCharArray(), myPassword.ToCharArray());
/*string text_line;
while ((text_line = freader.Read().ToString()) != null)
{
char[] textline = text_line.ToCharArray();
int length_text = text_line.Length;
char[] passwd = myPassword.ToCharArray();
int length_key = myPassword.Length;
text_encrypt(length_text, length_key, textline, passwd);
}
freader.Close();*/
}
if (e.command == "decodeimagefile")
{
Bitmap bitmap = (Bitmap)(new Bitmap(e.args));
string originalText = "";
float key = get_key(myPassword);
Page | 41
int codex = (int)((key * 1000000)%1000);
int codey = (int)(key * 1000);
int width = bitmap.Width;
int height = bitmap.Height;
if (codex > width)
{
while (codex > width)
codex -= width;
}
if (codey > height)
{
while (codey > height)
codey -= height;
}
if(codex == 0)
codex = 2;
if(codey == 0)
codey = 4;
decode myDecode = new decode();
originalText = myDecode.decrypt(codex, codey, bitmap);
int length_text = originalText.Length;
char[] original_val = originalText.ToCharArray();
string coded_text = "";
int sum = 0;
for (int i = 0; i <= length_text - 7; i = i + 8)
{
sum = 0;
char[] binvalue = { '0', '0', '0', '0', '0', '0', '0', '0'
};
for (int j = 0; j <= 7; j++)
binvalue[j] = original_val[i+j];
for (int j = 0; j <= 7; j++)
{
sum += (binvalue[j] - 48) * (int)(Math.Pow((double)2,
(double)(7 - j)));
}
coded_text += ((char)sum).ToString();
}
final_text = text_decrypt(coded_text.Length,
myPassword.Length, coded_text.ToCharArray(), myPassword.ToCharArray());
Page | 42
}
if (e.command == "text")
{
myText = e.args.ToString();
int length_text = myText.Length;
int length_key = myPassword.Length;
char[] textline = myText.ToCharArray();
char[] passwd = myPassword.ToCharArray();
text_encrypt(length_text, length_key, textline, passwd);
}
if(e.command == "audiofile")
{
myAudioFile = e.args;
}
if (e.command == "imagefile")
{
myImageFile = e.args.ToString();
try
{
pictureBox1.Image = new Bitmap(myImageFile);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Bitmap bitmap = (Bitmap)pictureBox1.Image;
int width = bitmap.Width;
int height = bitmap.Height;
float key = get_key(myPassword);
int length = code_text.Length * 8;
int blue = length % 100;
int green = (length / 100) % 100;
int red = (length / 10000) % 100;
int codex = (int)((key * 1000000)%1000);
int codey = (int)(key * 1000);
if (codex > width)
{
while (codex > width)
codex -= width;
}
if (codey > height)
{
while (codey > height)
codey -= height;
}
Page | 43
Color pixelcolor;
pixelcolor = bitmap.GetPixel(codex, codey);
pixelcolor = Color.FromArgb(red, green, blue);
length = code_text.Length * 8;
generate_bincodes();
if(codex == 0)
codex = 2;
if(codey == 0)
codey = 4;
bitmap.SetPixel(codex, codey, pixelcolor);
if (length > (width * height) - 1)
{
MessageBox.Show("Text too large !!!");
Application.Exit();
}
char[] text = mybinarycode_final.ToCharArray();
encode myCode = new encode();
bitmap = myCode.encrypt(codex,codey,length,text,bitmap);
}
}
private void generate_bincodes()
{
stack s = new stack();
char ch;
int i=0, j=0, k, temp;
int myLength = code_text.Length;
char[] codedText = code_text.ToCharArray();
while(i<myLength)
{
int count = 0;
s.initial();
temp = (int)codedText[i];
while(temp!=0)
{
k = temp%2;
s.push(k);
count++;
temp/=2;
}
Page | 44
if(count<8)
for(int y=count;y<8;y++)
s.push(0);
mybinarycode_final += s.display();
i++;
j++;
}
}
private void text_encrypt(int length_text, int length_key, char[]
text, char[] key)
{
int i = 0, j = 0;
char temp;
while (i < length_text)
{
if (j >= length_key)
j = 0;
if ((text[i] + key[j]) < 255)
temp = (char)(text[i] + key[j]);
else
temp = (char)(text[i] + key[j] - 256);
code_text += temp.ToString();
i++;
j++;
}
}
private string text_decrypt(int length_text, int length_key, char[]
text, char[] key)
{
string final = "";
int i = 0, j = 0;
char temp;
while (i < length_text)
{
if (j >= length_key)
j = 0;
if ((text[i] - key[j]) < 255)
temp = (char)(text[i] - key[j]);
else
temp = (char)(text[i] - key[j] - 256);
final += temp.ToString();
i++;
j++;
}
return (final);
}
Page | 45
private float get_key(string pwd)
{
int k = 0, i = 0, j = 0;
float[] prob ={ 0.08f, 0.02f, 0.03f, 0.03f, 0.12f, 0.02f, 0.02f,
0.05f, 0.08f, 0.01f, 0.01f, 0.04f, 0.03f, 0.07f, 0.08f, 0.02f, 0.01f, 0.06f,
0.06f, 0.06f, 0.03f, 0.01f, 0.02f, 0.01f, 0.02f, 0.01f };
float[] range_to ={ 0.08f, 0.1f, 0.13f, 0.16f, 0.28f, 0.30f,
0.32f, 0.37f, 0.45f, 0.46f, 0.47f, 0.51f, 0.54f, 0.61f, 0.69f, 0.71f, 0.72f,
0.78f, 0.84f, 0.9f, 0.93f, 0.94f, 0.96f, 0.97f, 0.99f, 1.00f };
float[] range_from ={ 0.00f, 0.08f, 0.1f, 0.13f, 0.16f, 0.28f,
0.30f, 0.32f, 0.37f, 0.45f, 0.46f, 0.47f, 0.51f, 0.54f, 0.61f, 0.69f, 0.71f,
0.72f, 0.78f, 0.84f, 0.90f, 0.93f, 0.94f, 0.96f, 0.97f, 0.99f };
float low = 0.00f, high = 1.00f, diff = 1.00f;
int x = 0;
char[] mypassword = pwd.ToCharArray();
int pwdlength = pwd.Length;
while (k < pwdlength)
{
if (((int)mypassword[k] >= 97) && ((int)mypassword[k] <= 122))
x = (int)mypassword[k] - 97;
else if (((int)mypassword[k] >= 65) && ((int)mypassword[k] <=
90))
x = (int)mypassword[k] - 65;
diff = high - low;
high = low + diff * range_to[x];
low = low + diff * range_from[x];
k++;
}
return (low);
}
private void axShockwaveFlash1_Enter(object sender, EventArgs e)
{
}
}
}
ENCODE.CS
Page | 46
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace Steganography
{
class encode:Stegnos
{
public Bitmap encrypt(int x, int y, int length, char[] text,Bitmap
bitmap)
{
Color pixelcolor = new Color();
int width = bitmap.Width;
int height = bitmap.Height;
int[,] transformmatrix = new int[1300, 1300];
int[,] rotatematrix = new int[1300, 1300];
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
transformmatrix[i, j] = 0;
rotatematrix[i, j] = 0;
}
}
transformmatrix[x, y] = 3;
int row = 0, col = 0, xprob = 0, yprob = 0, xadd = 0, yadd = 0;
row = bitmap.Height;
col = bitmap.Width;
xprob = x;
yprob = y;
if (yprob % 2 == 1)
yadd = yprob - 1;
else
yadd = yprob;
if (xprob % 2 == 1)
xadd = xprob - 1;
else
xadd = xprob;
if (row % 2 == 0)
row--;
if (col % 2 == 0)
col--;
Page | 47
if (xadd == 0)
xadd = 2;
if (yadd == 0)
yadd = 4;
int red, green, blue;
int flag = 0;
for (int i = 0; i < length; i++)
{
flag++;
x += xadd;
while (x >= col)
x -= col;
y += yadd;
while (y >= row)
y -= row;
if (transformmatrix[x, y] != 0)
{
y++;
if (y >= row)
y = 0;
}
pixelcolor = bitmap.GetPixel(x, y);
red = pixelcolor.R;
green = pixelcolor.G;
blue = pixelcolor.B;
if (text[i] == '0')
{
transformmatrix[x, y] = 2;
rotatematrix[x, y] = flag % 3;
switch (rotatematrix[x, y])
{
case 1:
if (red == 0)
{
red = 2;
}
else if (red % 2 == 1)
{
if (red == 255)
red--;
else
red++;
}
pixelcolor = Color.FromArgb(red, green, blue);
bitmap.SetPixel(x, y, pixelcolor);
break;
case 2:
Page | 48
if (green == 0)
{
green = 2;
}
else if (green % 2 == 1)
{
if (green == 255)
green--;
else
green++;
}
pixelcolor = Color.FromArgb(red, green, blue);
bitmap.SetPixel(x, y, pixelcolor);
break;
case 0:
if (blue == 0)
{
blue = 2;
}
else if (blue % 2 == 1)
{
if (blue == 255)
blue--;
else
blue++;
}
pixelcolor = Color.FromArgb(red, green, blue);
bitmap.SetPixel(x, y, pixelcolor);
break;
}
}
else if (text[i] == '1')
{
transformmatrix[x, y] = 1;
rotatematrix[x, y] = flag % 3;
switch (rotatematrix[x, y])
{
case 1: if (red % 2 == 0)
{
if (red == 0)
red++;
else
red--;
pixelcolor = Color.FromArgb(red, green, blue);
bitmap.SetPixel(x, y, pixelcolor);
}
Page | 49
break;
case 2: if (green % 2 == 0)
{
if (green == 0)
green++;
else
green--;
pixelcolor = Color.FromArgb(red, green, blue);
bitmap.SetPixel(x, y, pixelcolor);
}
break;
case 0: if (blue % 2 == 0)
{
if (blue == 0)
blue++;
else
blue--;
pixelcolor = Color.FromArgb(red, green, blue);
bitmap.SetPixel(x, y, pixelcolor);
}
break;
}
}
}
return (bitmap);
}
}
}
DECODE.CS
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
Page | 50
using System.Windows.Forms;
namespace Steganography
{
class decode:Stegnos
{
public string decrypt(int x,int y,Bitmap bitmap)
{
string final = "";
Color pixelcolor = new Color();
pixelcolor = bitmap.GetPixel(x, y);
int textlength = (pixelcolor.R * 10000) + (pixelcolor.G * 100) +
pixelcolor.B;
pixelcolor = Color.FromArgb(pixelcolor.R, pixelcolor.G, 0);
bitmap.SetPixel(x, y, pixelcolor);
int width = bitmap.Width;
int height = bitmap.Height;
int row = 0, col = 0, xprob = 0, yprob = 0, xadd = 0, yadd = 0;
row = bitmap.Height;
col = bitmap.Width;
xprob = x;
yprob = y;
if (yprob % 2 == 1)
yadd = yprob - 1;
else
yadd = yprob;
if (xprob % 2 == 1)
xadd = xprob - 1;
else
xadd = xprob;
if (row % 2 == 0)
row--;
if (col % 2 == 0)
col--;
if (xadd == 0)
xadd = 2;
if (yadd == 0)
yadd = 4;
int k = 0;
char[] outputstring = new char[textlength];
for (int i = 0; i < textlength; i++)
{
Page | 51
k++;
x += xadd;
while (x >= col)
x -= col;
y += yadd;
while (y >= row)
y -= row;
pixelcolor = bitmap.GetPixel(x, y);
int red = pixelcolor.R;
int green = pixelcolor.G;
int blue = pixelcolor.B;
switch (k % 3)
{
case 1: if (red == 0)
{
y++;
if (y >= row)
y = 0;
}
if (red % 2 == 0)
outputstring[i] = '0';
else
outputstring[i] = '1';
red = 0;
pixelcolor = Color.FromArgb(red, green, blue);
bitmap.SetPixel(x, y, pixelcolor);
break;
case 2: if (green == 0)
{
y++;
if (y >= row)
y = 0;
}
if (green % 2 == 0)
outputstring[i] = '0';
else
outputstring[i] = '1';
green = 0;
pixelcolor = Color.FromArgb(red, green, blue);
bitmap.SetPixel(x, y, pixelcolor);
break;
case 0: if (blue == 0)
{
y++;
if (y >= row)
y = 0;
}
if (blue % 2 == 0)
outputstring[i] = '0';
Page | 52
else
outputstring[i] = '1';
blue = 0;
pixelcolor = Color.FromArgb(red, green, blue);
bitmap.SetPixel(x, y, pixelcolor);
break;
}
}
for (int i = 0; i < textlength; i++)
{
final += outputstring[i].ToString();
}
return (final);
}
}
}
Page | 53

Mais conteúdo relacionado

Mais procurados (20)

Image steganography and cryptography
Image steganography and cryptographyImage steganography and cryptography
Image steganography and cryptography
 
Steganography Project
Steganography Project Steganography Project
Steganography Project
 
Audio Steganography synopsis
Audio Steganography synopsisAudio Steganography synopsis
Audio Steganography synopsis
 
Data Security Using Steganography
Data Security Using Steganography Data Security Using Steganography
Data Security Using Steganography
 
VIDEO STEGANOGRAPHY
VIDEO STEGANOGRAPHYVIDEO STEGANOGRAPHY
VIDEO STEGANOGRAPHY
 
Steganography
SteganographySteganography
Steganography
 
Image steganography
Image steganographyImage steganography
Image steganography
 
AUDIO STEGANOGRAPHY PRESENTATION
AUDIO STEGANOGRAPHY PRESENTATIONAUDIO STEGANOGRAPHY PRESENTATION
AUDIO STEGANOGRAPHY PRESENTATION
 
Image Security
Image SecurityImage Security
Image Security
 
Steganography
Steganography Steganography
Steganography
 
Steganography
SteganographySteganography
Steganography
 
Steganography
SteganographySteganography
Steganography
 
Steganography
SteganographySteganography
Steganography
 
Steganography ppt
Steganography pptSteganography ppt
Steganography ppt
 
Image encryption using aes key expansion
Image encryption using aes key expansionImage encryption using aes key expansion
Image encryption using aes key expansion
 
Image encryption and decryption
Image encryption and decryptionImage encryption and decryption
Image encryption and decryption
 
steganography
steganographysteganography
steganography
 
Image Steganography
Image SteganographyImage Steganography
Image Steganography
 
About Steganography
About SteganographyAbout Steganography
About Steganography
 
Steganography
SteganographySteganography
Steganography
 

Semelhante a 96683234 project-report-steganography

Data Security Using Audio Steganography
Data Security Using Audio SteganographyData Security Using Audio Steganography
Data Security Using Audio SteganographyRajan Yadav
 
Extended Visual Cryptography Using Watermarking
Extended Visual Cryptography Using WatermarkingExtended Visual Cryptography Using Watermarking
Extended Visual Cryptography Using WatermarkingShivam Singh
 
APPLICATION OF DATA HIDING IN AUDIO-VIDEO USING ANTIN FORENSICS TECHNIQUE FOR...
APPLICATION OF DATA HIDING IN AUDIO-VIDEO USING ANTIN FORENSICS TECHNIQUE FOR...APPLICATION OF DATA HIDING IN AUDIO-VIDEO USING ANTIN FORENSICS TECHNIQUE FOR...
APPLICATION OF DATA HIDING IN AUDIO-VIDEO USING ANTIN FORENSICS TECHNIQUE FOR...ijiert bestjournal
 
Quantum Cryptography Approach for Resolving Cyber Threats
Quantum Cryptography Approach for Resolving Cyber ThreatsQuantum Cryptography Approach for Resolving Cyber Threats
Quantum Cryptography Approach for Resolving Cyber Threatsijtsrd
 
Recognizing of Text and Product Label from Hand Held Entity Intended for Visi...
Recognizing of Text and Product Label from Hand Held Entity Intended for Visi...Recognizing of Text and Product Label from Hand Held Entity Intended for Visi...
Recognizing of Text and Product Label from Hand Held Entity Intended for Visi...YogeshIJTSRD
 
DARQ - The Bleeding Edge Technology
DARQ - The Bleeding Edge TechnologyDARQ - The Bleeding Edge Technology
DARQ - The Bleeding Edge TechnologyIRJET Journal
 
Colour Based Cryptography
Colour Based CryptographyColour Based Cryptography
Colour Based CryptographyIRJET Journal
 
Review On Encrypting and Decrypting Message Via Image Slicing
Review On Encrypting and Decrypting Message Via Image SlicingReview On Encrypting and Decrypting Message Via Image Slicing
Review On Encrypting and Decrypting Message Via Image SlicingIRJET Journal
 
Mitul Nagar Resume for CR Report2014-2015
Mitul Nagar Resume for CR Report2014-2015Mitul Nagar Resume for CR Report2014-2015
Mitul Nagar Resume for CR Report2014-2015Mitul Nagar
 
Steganography_ProjectReport.doc
Steganography_ProjectReport.docSteganography_ProjectReport.doc
Steganography_ProjectReport.docssusere02009
 
Video Steganography using Discrete Wavelet Transform and Artificial Intelligence
Video Steganography using Discrete Wavelet Transform and Artificial IntelligenceVideo Steganography using Discrete Wavelet Transform and Artificial Intelligence
Video Steganography using Discrete Wavelet Transform and Artificial Intelligenceijtsrd
 
International journal of latest Trends in Engineering and Technology
International journal of latest Trends in Engineering and TechnologyInternational journal of latest Trends in Engineering and Technology
International journal of latest Trends in Engineering and Technologypriyanka singh
 
VTU final year project report
VTU final year project reportVTU final year project report
VTU final year project reportathiathi3
 
Color based android shuffling pattern lock
Color based android shuffling pattern lockColor based android shuffling pattern lock
Color based android shuffling pattern lockIRJET Journal
 
Transmitting bulk amount of data in the form of qr code with cbfsc and chunki
Transmitting bulk amount of data in the form of qr code with cbfsc and chunkiTransmitting bulk amount of data in the form of qr code with cbfsc and chunki
Transmitting bulk amount of data in the form of qr code with cbfsc and chunkiIAEME Publication
 

Semelhante a 96683234 project-report-steganography (20)

Data Security Using Audio Steganography
Data Security Using Audio SteganographyData Security Using Audio Steganography
Data Security Using Audio Steganography
 
Extended Visual Cryptography Using Watermarking
Extended Visual Cryptography Using WatermarkingExtended Visual Cryptography Using Watermarking
Extended Visual Cryptography Using Watermarking
 
APPLICATION OF DATA HIDING IN AUDIO-VIDEO USING ANTIN FORENSICS TECHNIQUE FOR...
APPLICATION OF DATA HIDING IN AUDIO-VIDEO USING ANTIN FORENSICS TECHNIQUE FOR...APPLICATION OF DATA HIDING IN AUDIO-VIDEO USING ANTIN FORENSICS TECHNIQUE FOR...
APPLICATION OF DATA HIDING IN AUDIO-VIDEO USING ANTIN FORENSICS TECHNIQUE FOR...
 
Quantum Cryptography Approach for Resolving Cyber Threats
Quantum Cryptography Approach for Resolving Cyber ThreatsQuantum Cryptography Approach for Resolving Cyber Threats
Quantum Cryptography Approach for Resolving Cyber Threats
 
Recognizing of Text and Product Label from Hand Held Entity Intended for Visi...
Recognizing of Text and Product Label from Hand Held Entity Intended for Visi...Recognizing of Text and Product Label from Hand Held Entity Intended for Visi...
Recognizing of Text and Product Label from Hand Held Entity Intended for Visi...
 
DARQ - The Bleeding Edge Technology
DARQ - The Bleeding Edge TechnologyDARQ - The Bleeding Edge Technology
DARQ - The Bleeding Edge Technology
 
Colour Based Cryptography
Colour Based CryptographyColour Based Cryptography
Colour Based Cryptography
 
Review On Encrypting and Decrypting Message Via Image Slicing
Review On Encrypting and Decrypting Message Via Image SlicingReview On Encrypting and Decrypting Message Via Image Slicing
Review On Encrypting and Decrypting Message Via Image Slicing
 
NIS.docx
NIS.docxNIS.docx
NIS.docx
 
Mitul Nagar Resume for CR Report2014-2015
Mitul Nagar Resume for CR Report2014-2015Mitul Nagar Resume for CR Report2014-2015
Mitul Nagar Resume for CR Report2014-2015
 
Steganography_ProjectReport.doc
Steganography_ProjectReport.docSteganography_ProjectReport.doc
Steganography_ProjectReport.doc
 
Video Steganography using Discrete Wavelet Transform and Artificial Intelligence
Video Steganography using Discrete Wavelet Transform and Artificial IntelligenceVideo Steganography using Discrete Wavelet Transform and Artificial Intelligence
Video Steganography using Discrete Wavelet Transform and Artificial Intelligence
 
Arvind stegnography
Arvind stegnographyArvind stegnography
Arvind stegnography
 
1.pdf
1.pdf1.pdf
1.pdf
 
International journal of latest Trends in Engineering and Technology
International journal of latest Trends in Engineering and TechnologyInternational journal of latest Trends in Engineering and Technology
International journal of latest Trends in Engineering and Technology
 
MicazXpl
MicazXplMicazXpl
MicazXpl
 
VTU final year project report
VTU final year project reportVTU final year project report
VTU final year project report
 
Color based android shuffling pattern lock
Color based android shuffling pattern lockColor based android shuffling pattern lock
Color based android shuffling pattern lock
 
gyu.docx
gyu.docxgyu.docx
gyu.docx
 
Transmitting bulk amount of data in the form of qr code with cbfsc and chunki
Transmitting bulk amount of data in the form of qr code with cbfsc and chunkiTransmitting bulk amount of data in the form of qr code with cbfsc and chunki
Transmitting bulk amount of data in the form of qr code with cbfsc and chunki
 

Mais de Mahmut Yildiz

Mais de Mahmut Yildiz (16)

Arm code arduino
Arm code arduinoArm code arduino
Arm code arduino
 
Drv8833 motor driver datasheet
Drv8833 motor driver datasheetDrv8833 motor driver datasheet
Drv8833 motor driver datasheet
 
Tcs230
Tcs230Tcs230
Tcs230
 
Lecture7
Lecture7Lecture7
Lecture7
 
Microsd card spec
Microsd card specMicrosd card spec
Microsd card spec
 
Micro sd specification
Micro sd specificationMicro sd specification
Micro sd specification
 
Lecture6
Lecture6Lecture6
Lecture6
 
Comunication project
Comunication projectComunication project
Comunication project
 
Audioprocessing
AudioprocessingAudioprocessing
Audioprocessing
 
Us6330335
Us6330335Us6330335
Us6330335
 
Amplitude modulation
Amplitude modulationAmplitude modulation
Amplitude modulation
 
Introduction to modulation and demodulation
Introduction to modulation and demodulationIntroduction to modulation and demodulation
Introduction to modulation and demodulation
 
Matlabders
MatlabdersMatlabders
Matlabders
 
Matlab.pdf
Matlab.pdfMatlab.pdf
Matlab.pdf
 
Matlab grafik
Matlab grafikMatlab grafik
Matlab grafik
 
Basic Info for Matlab
 Basic Info for Matlab Basic Info for Matlab
Basic Info for Matlab
 

Último

Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...121011101441
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfROCENODodongVILLACER
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfAsst.prof M.Gokilavani
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...VICTOR MAESTRE RAMIREZ
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvLewisJB
 
Heart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxHeart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxPoojaBan
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHC Sai Kiran
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AIabhishek36461
 
Comparative Analysis of Text Summarization Techniques
Comparative Analysis of Text Summarization TechniquesComparative Analysis of Text Summarization Techniques
Comparative Analysis of Text Summarization Techniquesugginaramesh
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girlsssuser7cb4ff
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncssuser2ae721
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxKartikeyaDwivedi3
 
What are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxWhat are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxwendy cai
 
Call Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile serviceCall Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile servicerehmti665
 
An introduction to Semiconductor and its types.pptx
An introduction to Semiconductor and its types.pptxAn introduction to Semiconductor and its types.pptx
An introduction to Semiconductor and its types.pptxPurva Nikam
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptSAURABHKUMAR892774
 
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptxDecoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptxJoão Esperancinha
 
Biology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptxBiology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptxDeepakSakkari2
 

Último (20)

Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdf
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvv
 
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptxExploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
 
Heart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptxHeart Disease Prediction using machine learning.pptx
Heart Disease Prediction using machine learning.pptx
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECH
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AI
 
Comparative Analysis of Text Summarization Techniques
Comparative Analysis of Text Summarization TechniquesComparative Analysis of Text Summarization Techniques
Comparative Analysis of Text Summarization Techniques
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girls
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptx
 
What are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptxWhat are the advantages and disadvantages of membrane structures.pptx
What are the advantages and disadvantages of membrane structures.pptx
 
Call Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile serviceCall Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile service
 
POWER SYSTEMS-1 Complete notes examples
POWER SYSTEMS-1 Complete notes  examplesPOWER SYSTEMS-1 Complete notes  examples
POWER SYSTEMS-1 Complete notes examples
 
An introduction to Semiconductor and its types.pptx
An introduction to Semiconductor and its types.pptxAn introduction to Semiconductor and its types.pptx
An introduction to Semiconductor and its types.pptx
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.ppt
 
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptxDecoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
Decoding Kotlin - Your guide to solving the mysterious in Kotlin.pptx
 
Biology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptxBiology for Computer Engineers Course Handout.pptx
Biology for Computer Engineers Course Handout.pptx
 

96683234 project-report-steganography

  • 1. “Image and Audio Steganography” B.Tech Project Report Submitted in partial fulfillment of the requirements for the degree of Bachelor of Technology, Computer Science and Engineering Submitted By: Rohit Jaiswal CSE – 06000025 SUPERVISOR: Mr. Rajeev Srivastava (Reader) Department of Computer Science and Engineering Institute of Technology Banaras Hindu University, Varanasi - 221005
  • 2. DEPARTMENT OF COMPUTER ENGINEERING INSTITUTE OF TECHNOLOGY BANARAS HINDU UNIVERSITY Varanasi – 221005, INDIA Rajeev Srivastava Reader Computer Science and Engineering Ref. No. IT/CSE/2007-08/ Dated: ______________ CERTIFICATE This is to certify that Rohit Jaiswal ( Roll no. 06000025), student of the Department of Computer Science & Engineering , Institute of Technology, Banaras Hindu University, Varanasi worked for his B.Tech. Minor Project entitled “Image and Audio Steganography” under my supervision from beginning of fourth semester of B.Tech. program 2006-2010. The report submitted by him embodies the literature from various reputed resources and is an authentic record of the work carried out by them under my supervision and guidance. (Rajeev Srivastava) Reader Department of Computer Science & Engineering Institute Of Technology Banaras Hindu University Page | 2
  • 3. ACKNOWLEDGEMENT It has indeed been a great privilege for me to have Mr. Rajeev Srivastava, Department of Computer Science and Engineering, Institute of Technology, Banaras Hindu University, as my mentor for this project. His awe-inspiring personality, superb guidance and constant encouragement are the motive force behind this project work. I take this opportunity to express my utmost gratitude to him. I am also indebted to him for his timely and valuable advice. I am highly grateful to Prof. A.K.Tripathi, Head, Department of Computer Science and Engineering, Institute of Technology, Banaras Hindu University for providing necessary facilities and encouraging me during the course of work. I am thankful to all technical and non-teaching staff of the Department of Computer Science and Engineering for their constant assistance and co-operation. ( Rohit Jaiswal ) Roll No. : 06000025 B.Tech (Part II) Semester IV Department of Computer Science & Engineering Institute Of Technology ,Banaras Hindu University Page | 3
  • 4. Contents 1. Abstract ...........................................................................................................5 2. Chapter 1: Introduction.....................................................................................6 Steganography and Cryptography……………………………………...6 Scope of Steganography………………………………………………...7 3. Chapter 2: Technologies Used…….................................................................8 Visual C#.NET 8.0 or higher……………………………………………8 Macromedia Flash 8……………………………………………………..8 4. Chapter 3: Theoretical Background……..........................................................9 Analysis of Digital Image………………………………………………...9 Analysis of Digital Audio………………………………………………..12 5. Chapter 4: Analysis and Design….……….......................................................14 Context Diagram………………………………………………………...14 Data Flow Diagram.........................................................................15 Encoding………………………………………………………….15 Decoding………………………………………………………….16 6. Chapter 5. Algorithms………………………………………………………………17 7. Chapter 6: Software Implementation……........................................................23 Functions…………………………………………………………………23 Functions Map…………………………………………………………..24 8. Chapter 7: Inputs and Outputs………….........................................................25 9. Chapter 8:Conclusion and Future Work...........................................................34 8. References......................................................................................................35 9. Appendix…………………………......................................................................36 Keywords……………...……………………………………………………….36 Source Code............................................................................................37 Page | 4
  • 5. ABSTRACT Steganography is the art and science of writing hidden messages in such a way that no one apart from the sender and intended recipient even realizes there is a hidden message. There are often cases when it is not possible to send messages openly or in encrypted form. This is where steganography can come into play. While cryptography provides privacy, steganography is intended to provide secrecy. This project deals with hiding of text behind multimedia, i.e. digital images, wave audio, real media audio, etc. Cryptographic cipher is used before hiding text to make this procedure more secure. The GUI has been given a funky look by using flash. IMPORTANT KEYWORDS Steganography , Cryptography, Cover Medium , Plain Text, Cipher Text, Stego Key, Stego Medium Page | 5
  • 6. Introduction The word steganography is of Greek origin and means "covered, or hidden writing". Steganography is the art and science of communicating in a way which hides the existence of the communication. By contrast, cryptography obscures the meaning of a message, but it does not conceal the fact that there is a message. Steganography and Cryptography Cryptography — the science of writing in secret codes — addresses all of the elements necessary for secure communication over an insecure channel, namely privacy, confidentiality, key exchange, authentication, and non-repudiation. But cryptography does not always provide safe communication. Consider an environment where the very use of encrypted messages causes suspicion. Consider the following text file; what else is it likely to be if not encrypted? qANQR1DBwU4D/TlT68XXuiUQCADfj2o4b4aFYBcWumA7hR1Wvz9rbv2BR6WbEUsy ZBIEFtjyqCd96qF38sp9IQiJIKlNaZfx2GLRWikPZwchUXxB+AA5+lqsG/ELBvRa c9XefaYpbbAZ6z6LkOQ+eE0XASe7aEEPfdxvZZT37dVyiyxuBBRYNLN8Bphdr2zv z/9Ak4/OLnLiJRk05/2UNE5Z0a+3lcvITMmfGajvRhkXqocavPOKiin3hv7+Vx88 uLLem2/fQHZhGcQvkqZVqXx8SmNw5gzuvwjV1WHj9muDGBY0MkjiZIRI7azWnoU9 3KCnmpR60VO4rDRAS5uGl9fioSvze+q8XqxubaNsgdKkoD+tB/4u4c4tznLfw1L2 YBS+dzFDw5desMFSo7JkecAS4NB9jAu9K+f7PTAsesCBNETDd49BTOFFTWWavAfE gLYcPrcn4s3EriUgvL3OzPR4P1chNu6sa3ZJkTBbriDoA3VpnqG3hxqfNyOlqAka mJJuQ53Ob9ThaFH8YcE/VqUFdw+bQtrAJ6NpjIxi/x0FfOInhC/bBw7pDLXBFNaX HdlLQRPQdrmnWskKznOSarxq4GjpRTQo4hpCRJJ5aU7tZO9HPTZXFG6iRIT0wa47 AR5nvkEKoIAjW5HaDKiJriuWLdtN4OXecWvxFsjR32ebz76U8aLpAK87GZEyTzBx dV+lH0hwyT/y1cZQ/E5USePP4oKWF4uqquPee1OPeFMBo4CvuGyhZXD/18Ft/53Y WIebvdiCqsOoabK3jEfdGExce63zDI0= =MpRf The message above is a sentence in English that is encrypted using Pretty Good Privacy (PGP), probably the most commonly used e-mail encryption software today. The advantage of steganography over cryptography alone is that messages do not attract attention to themselves, to messengers, or to recipients. Whereas the goal of cryptography is to make data unreadable by a third party, the goal of steganography is to hide the data from a third party. Often, steganography and cryptography are used together to ensure security of the covert message. Page | 6 CHAPTER 1
  • 7. SCOPE OF STEGANOGRAPHY Steganography is a very interesting and advantageous science these days and has following uses:  Digital Watermarking To protect a copyright on information. Photo collections, sold on CD, often have hidden messages in the photos which allow detection of unauthorized use. The same technique applied to DVDs is even more effective, since the industry builds DVD recorders to detect and disallow copying of protected DVDs.  The simplest and oldest are used in map making, where cartographers sometimes add a tiny fictional street to their maps, allowing them to prosecute copycats.  A similar trick is to add fictional names to mailing lists as a check against unauthorized resellers.  Steganography doesn't just apply to written forms of communication. Radio and TV messages, from World War II to today, can be used to hide coded or hidden messages. Some government sources suspect that Osama bin Laden's pre-recorded videos that are re-played on TV stations around the world contain hidden messages.  Even biological data, stored on DNA, may be a candidate for hidden messages, as biotech companies seek to prevent unauthorized use of their genetically engineered material. The technology is already in place for this: three New York researchers successfully hid a secret message in a DNA sequence and sent it across the country.  Steganography can also be used to allow communication within an underground community.  Steganography is used by some modern printers, including HP and Xerox brand color laser printers. Tiny yellow dots are added to each page. The dots are barely visible and contain encoded printer serial numbers, as well as date and time stamps. Page | 7
  • 8. TECHNOLOGIES USED  Visual Studio.NET version 2.0 or higher or Visual C#.NET 8.0 or higher C# is an object-oriented programming language developed by Microsoft as part of the .NET initiative and later approved as a standard by ECMA (ECMA- 334) and ISO (ISO/IEC 23270). Anders Hejlsberg leads development of the C# language, which has a procedural, object-oriented syntax based on C++ and includes influences from aspects of several other programming languages (most notably Delphi and Java) with a particular emphasis on simplification. In this project all the framework has been designed in C#. It deals with the main Algorithms of this project.  Macromedia Flash Professional 8.0 Flash is commonly used to create animation, advertisements, various web page components, to integrate video into web pages, and more recently, to develop rich Internet applications. Files in the SWF (pronounced: Swif) format, traditionally called "Flash movies" or "Flash games", usually have a .swf file extension and may be an object of a web page, strictly "played" in a standalone Flash Player, or incorporated into a Projector, a self-executing Flash movie (with the .exe extension in Microsoft Windows). In this project Flash has been used to give the application a stylish look and some animaions. The SWF movies has been associated with the basic platform of C# and has become the background of GUI. Page | 8 .EXE file ( built in C#) Functions ( built in C#) .SWF file ( built in Flash) CHAPTER 2
  • 9. THEORETICAL BACKGROUND ANALYSIS OF DIGITAL IMAGE An image file is merely a binary file containing a binary representation of the color or light intensity of each picture element (pixel) comprising the image. Images typically use either 8-bit or 24-bit color. When using 8-bit color, there is a definition of up to 256 colors forming a palette for this image, each color denoted by an 8-bit value. A 24-bit color scheme, as the term suggests, uses 24 bits per pixel and provides a much better set of colors. In this case, each pixel is represented by three bytes, each byte representing the intensity of the three primary colors red, green, and blue (RGB), respectively. The color orange, for example, would be displayed with red set to 100% , green set to 50% and no blue . The size of an image file, then, is directly related to the number of pixels and the granularity of the color definition. A typical 640x480 pix image using a palette of 256 colors would require a file about 307 KB in size (640 • 480 bytes), whereas a 1024x768 pix high-resolution 24-bit color image would result in a 2.36 MB file (1024 • 768 • 3 bytes). To avoid sending files of this enormous size, a number of compression schemes have been developed over time, notably Bitmap (BMP), Graphic Interchange Format (GIF), and Joint Photographic Experts Group (JPEG) file types. Not all are equally suited to steganography, however. GIF and 8-bit BMP files employ what is known as lossless compression, a scheme that allows the software to exactly reconstruct the original image. JPEG, on the other hand, uses lossy compression, which means that the expanded image Page | 9 CHAPTER 3
  • 10. is very nearly the same as the original but not an exact duplicate. Lossless compression is much better suited to applications where the integrity of the original information must be maintained, such as steganography. While JPEG can be used for stego applications, it is more common to embed data in GIF or BMP files. The simplest approach to hiding data within an image file is called Least Significant Bit (LSB) insertion. In this method, we can take the binary representation of the hidden_data and overwrite the LSB of each byte within the cover_image. If we are using 24-bit color, the amount of change will be minimal and indiscernible to the human eye. As an example, suppose that we have three adjacent pixels (nine bytes) with the following RGB encoding: 10010101 00001101 11001001 10010110 00001111 11001010 10011111 00010000 11001011 Now suppose we want to "hide" the following 9 bits of data (the hidden data is usually compressed prior to being hidden): 101101101. If we overlay these 9 bits over the LSB of the 9 bytes above, we get the following (where bits in bold have been changed): 10010101 00001100 11001001 10010111 00001110 11001011 10011111 00010000 11001011 Note that we have successfully hidden 9 bits but at a cost of only changing 4, or roughly 50%, of the LSBs. A 640x480 pixel image, the size of a small computer monitor, can hold over 400,000 characters. That's a whole novel hidden in one modest photo! This poject involves following formats of images: Bitmap Images (.bmp) Joint Photographic Experts Group (.jpg) Portable Network Graphics (.png) Tagged Image File Format (.tif) Windows Meta Files (.wmf) Page | 10
  • 11. BMP Image File Format File Header Data Size(Bytes) File Type(BM in case of BMP files) 2 File Size 4 Reserved Byte(Always 0) 1 Reserved Byte(Always 0) 1 Bf of Bits Size of Info Header 4 Width of Bitmap 2 Height of Bitmap 2 No of planes(1 for BMP) 1 Bit Count(Bits/Pixel, Must be 1, 4, 8, 24) 1 Type of Compression used(none) 2 Size of Image Data in Bytes 2 Horizontal Resolution in Pixels/Meter 2 Vertical Resolution in Pixels/Meter 2 No of Color’s Indexes Used 2 Important Color Indexes 2 Reading Pixel Values Data Size(Bytes) R(Red) 1 B(Blue) 1 G(Green) 1 Reserved Word for RGB 1 Page | 11
  • 12. ANALYSIS OF DIGITAL AUDIO Digital audio differs from traditional analog sound in that it is a discrete rather than continuous signal. A discrete signal is created by sampling a continuous analog signal at a specified rate. For example, the standard sampling rate for CD digital audio is about 44kHz. The following figure illustrates a continuous analog sound wave being sampled to produce digital audio. Note the sinusoidal nature of a sound wave. We emphasize the discrete nature of a digital signal in the diagram. However, standard sampling rates are usually set at a level where the resultant digital signal is visually indistinguishable from the original analog signal. Digital audio is stored on a computer as a sequence of 0's and 1's. With the right tools, it is possible to change the individual bits that make up a digital audio file. Such precise control allows changes to be made to the binary sequence that are not discernible to the human ear. The secret message is embedded by slightly altering the binary sequence of a sound file. The key innovation in recent years was to choose an innocent looking cover that contains plenty of random information, called white noise. You can hear white noise as a the nearly silent hiss of a blank tape playing. The secret message replaces the white noise, and if done properly it will appear to be as random as the noise was. Thus the basic design principle of steganographic systems is “replacing high entropy noise with a high entropy secret transmission” . Page | 12
  • 13. Wave File Format Wave Header Data Size(Bytes) Header Name(RIFF) 4 File Size 4 Format Name(wave) 4 Key Word(fmt) 4 Channels(Mono = 1, Stereo = 2) 1 Frequency 4 Blank(Less Important Data) 6 Bit Resolution 1 Blank(Less Important Data) 12 Wave Data Data Size(Bytes) Sound Length 1 Frequency 1 Sample Data Rest Of Wave File Page | 13
  • 14. ANALYSIS AND DESIGN CONTEXT DIAGRAM Page | 14 COVER MEDIUM (Image or Audio File) PLAIN TEXT OR TEXT FILE (Text to be Hidden) STEGNO KEY STEGNO-ENCODING TOOL STEGNO MEDIUM STEGNO-DECODING TOOL .DAT FILE CONTAINING HIDDEN TEXT CHAPTER 4
  • 15. DATA FLOW DIAGRAM ENCODING Page | 15 STEGNO KEY Arithmetic coding Key Information PLAIN TEXT Vigenere Cipher Encripted Text Conversion into ASCII form Bit Stream COVER MEDIUM Read the Image in RGB values of pixel in Bit form Read the Audio in Frequency Values in Byte form Conversion into 8-bit form Using Key Information Encode Bit Stream in the Bit/Byte Stream of Cover Medium STEGNO MEDIUM Resultant Bit/ Byte Stream
  • 16. DECODING Page | 16 Arithmetic coding Key Information Vigenere Cipher Encripted Text Conversion into ASCII form Bit Stream of Hidden Text Conversion into 8-bit form ORIGINAL TEXT STEGNO KEY STEGNO MEDIUM Read the Audio in Frequency Values in Byte form Read the Image in RGB values of pixel in Bit form Using Key Information Decode Bit Stream in the Bit/Byte Stream
  • 17. ALGORITHMS ENCODING Least significant bit (LSB) coding is the simplest way to embed information in a digital Image or Audio file. By substituting the least significant bit of each sampling point in Audio and each pixel in Image with a binary message, LSB coding allows for a large amount of data to be encoded. The following diagram illustrates how the message 'HEY' is encoded in a 16-bit CD quality sample using the LSB method: In LSB coding, the ideal data transmission rate is 1 kbps per 1 kHZ. Page | 17 CHAPTER 5
  • 18. ALGORITHM FOR ENCODING STEP 1. //Information from Stegno Key Input the key in string datatype; //Apply Arithmetic coding to the string key float num = Arithmetic_coding( key); num=num*100; x=10*(1st digit of num); y=10*(2st digit of num); STEP 2. //converting Plain Text into Bit Stream //Input Text to be hidden in string datatype; string plaintext; //apply encription algorithm on this string string ciphertext = Vigenere_cipher(plaintext); convert ciphertext ASCII form; convert ASCII form Bit_stream; STEP 3. //Hiding bitstream of input text in Image or Audio file int n = length(plaintext); //HIDING IN IMAGE FILE get_resolution( image )  pxq; if (p==odd) p=p-1; if(q==odd) q=q-1; R value of 1x1 pixel = n; int g =1; int h=1; int m= bit lodation in Bit_stream; char C= R or G or B; for(int i=0;i<8n;i++) { If (m%3==1) C=R; If (m%3==1) C=G; If (m%3==1) C=B; Page | 18
  • 19. Least significant digit of C value of (g+x)x(h+y) th pixel = Bit_stream[i]; g = g+x; h = h+y; } //HIDING IN AUDIO FILE string audio_stream= sampled audio Byte_stream; audio_stream[0]= n; for(int i=0;i<8n;i++) { If (Bit_stream[i]==0) audio_stream[i++]=audio_stream[i++] AND “11111110”; If (Bit_stream[i]==1) audio_stream[i]=audio_stream[i] OR “00000001”; } Page | 19
  • 20. ALGORITHM FOR DECODING STEP 1. //Information from Stegno Key Input the key in string datatype; //Apply Arithmetic coding to the string key float num = Arithmetic_coding( key); num=num*100; x=10*(1st digit of num); y=10*(2st digit of num); //from IMAGE file STEP 2. //read stegno image int n= R value of 1x1 pixel int g=0; int h=0; STEP 3. for(int i=1; i<=n;i++) { g=g+x; h=h+y; string Bit_stream; char C; If (i%3==1) C=R; If (i%3==1) C=G; If (i%3==1) C=B; Bit_stream[i--]=least significant digit of C value of (gxh) pixel } // from Audio file STEP 2. //read stegno audio string audio_stream= sampled stegno audio Byte_stream; int n = audio_stream[0]; Page | 20
  • 21. STEP 3. for(int i=1;i<8n;i++) { Bit_stream[i]=least significant digit of audio_stream[i]; } STEP 4. //converting Bit Stream into Plain Text string ciphertext ; convert Bit_stream  ASCII form; convert ASCII form  ciphertext; //apply dencription algorithm on this string string plaintext = inverse_Vigenere_cipher(ciphertext); PRINT plaintext; Page | 21
  • 22. Vigenere Cipher Plain text: ATTACKATDAWN Key: LEMONLEMONLE Cipher text: LXFOPVEFRNHR The person sending the message chooses a keyword and repeats it until it matches the length of the plaintext, for example, the keyword "LEMON" makes : Key: LEMONLEMONLE Page | 22
  • 23. IMPLEMENTATION FUNCTIONS  private void axShockwaveFlash1_FSCommand() This functions is used to make connection between Flash GUI (i.e. SWF movie) and C# codes. It also performs encoding and decoding operation for audio medium.  private void generate_bincodes() It is used to convert the string into binary codes or bit stream.This function uses the class stack to perform this task.  private void text_encrypt() It is used to encrypt the plain text using vigenere cipher.  private string text_decrypt() It is used to decrypt the text which is generated from the stegno medium.  private float get_key() This function is used to manipulate the stegno key.  public Bitmap encrypt() This is the function responsible for hiding encryted text in the image file  public string decrypt() This is the function responsible for decoding the stegno medium. Page | 23 CHAPTER 6
  • 24. FUNCTION MAP Page | 24 EXE file (built in SWF file (built in Flash) axShockwav eFlash1_FS Command() CLASS DECODE encrypt() decrypt() get_key() CLASS ENCODE CLASS Stegnos text_ encrypt() text_ decrypt() gen_binary_ code() CLASS Stack
  • 33. CONCLUSION AND FUTURE WORK Steganography is a really interesting subject and outside of the mainstream cryptography and system administration that most of us deal with day after day. “You never know if a message is hidden”, this is the dilemma that empowers steganography. As more emphasis is placed on the areas of copyright protection, privacy protection, and surveillance, we believe that steganography will continue to grow in importance as a protection mechanism. This project deals with Steganography in Image and Audio files using Least Significant Bit (LSB) coding. This project can uplifted by considering following measures:  A more sophisticated approach can be implemented by using a pseudo-random number generator to spread the message over the sound file in a random manner.  This project can be extended by using other media files like video and other complex formats of audio and image. Page | 33 CHAPTER 8
  • 34. REFERENCES  “Steganography: How to Send a Secret Message By Bryan Clair” http://www.strangehorizons.com/2001/20011008/steganography.s html  “A detailed look at SteganographicTechniques and their use in an Open-SystemsEnvironment” http://www.scribd.com/word/full/20529?access_key=34h2xr3z7wokx  Steganography from Wikipedia http://en.wikipedia.org/wiki/Steganography  Image Steganography and Steganalysis http://www.ims.nus.edu.sg/Programs/imgsci/files/memon/sing_stego.pdf  Microsoft Tutorials for C# Express edition Page | 34
  • 35. APPENDIX KEYWORDS AND DEFINITIONS Steganography: The art and science of hidden writing. Cryptography : The science of writing in secret codes. Cover Medium: file in which we will hide the hidden_data Plain Text : Data to be hidden. Cipher Text : The encrypted data to be hidden. Stego Key : Data is hidden by using this string Stego Medium : The final resultant file after hiding data. Bit Stream : The binary code generated from the string. Page | 35
  • 36. SOURCE CODE PROGRAM.CS using System; using System.Collections.Generic; using System.Windows.Forms; namespace Steganography { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Stegnos()); } } } FORM1.CS using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; namespace Steganography { public partial class Stegnos : Form { public Stegnos() { InitializeComponent(); this.axShockwaveFlash1.FSCommand += new AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEventHandler(axShockw aveFlash1_FSCommand); } string code_text; string myTextFile = "", myPassword = "", myText = ""; public string myImageFile = ""; int index=0; string mybinarycode_final = "",myAudioFile=""; string final_text = ""; Page | 36
  • 37. string sampleStr = ""; Stream outputstream; int chkval = 0; private void axShockwaveFlash1_FSCommand(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e) { if (e.command == "exit") Application.Exit(); if (e.command == "password") { myPassword = e.args.ToString(); } if (e.command == "savetextfile") { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Binary Files (*.dat)|*.dat"; if (dlg.ShowDialog() == DialogResult.OK) { StreamWriter fwriter = File.CreateText(dlg.FileName); fwriter.WriteLine(final_text); fwriter.Close(); } } if(e.command == "savedfile") { SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Bitmap (*.bmp)|*.bmp|Portable Network Graphics (*.png)|*.png|Tagged Image File Format (*.tif)|*.tif|Windows MetaFile (*.wmf)|*.wmf|Windows Audio (*.wav)|*.wav"; if (dlg.ShowDialog() == DialogResult.OK) { System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Bmp; if (dlg.FilterIndex == 2) format = System.Drawing.Imaging.ImageFormat.Png; if (dlg.FilterIndex == 3) format = System.Drawing.Imaging.ImageFormat.Tiff; if (dlg.FilterIndex == 4) format = System.Drawing.Imaging.ImageFormat.Wmf; if (dlg.FilterIndex == 5) { chkval = 1; Page | 37
  • 38. BinaryWriter messageWriter = new BinaryWriter(new MemoryStream()); FileStream fs = new FileStream(myAudioFile, FileMode.Open); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, (int)fs.Length); messageWriter.Write(buffer); messageWriter.Seek(0, SeekOrigin.Begin); Stream WaveStream = messageWriter.BaseStream; /*SaveFileDialog dlg1 = new SaveFileDialog(); dlg1.Filter = "wav|*.wav"; if (dlg1.ShowDialog() == DialogResult.OK) { StreamWriter fwriter = File.CreateText(dlg1.FileName); fwriter.Close(); }*/ outputstream = new FileStream(dlg.FileName, FileMode.Create); BinaryWriter writer = new BinaryWriter(outputstream); String str = ""; byte[] ch = new byte[100]; WaveStream.Read(ch, 0, 100); writer.Write(ch); generate_bincodes(); char[] message = mybinarycode_final.ToCharArray(); int messageLength = mybinarycode_final.Length; int msglnth = messageLength; byte[] newByte = new byte[1]; int sampleint = 4; int count = 0; int messagecount = 0; //int streamcount = 44; for(int i=0;i<6;i++) { WaveStream.Read(ch, 0, 1); writer.Write((byte)(msglnth % 10)); msglnth = msglnth / 10; } float keygen = get_key(myPassword); int advancesteps = (int)(keygen * 100); if (advancesteps <50) advancesteps = 50; if ((fs.Length - 100) < messageLength * advancesteps) { MessageBox.Show("Audio File is too small to hide this message"); Page | 38
  • 39. Application.Exit(); } while (messagecount < messageLength) { sampleint = WaveStream.ReadByte(); if (count % advancesteps == 0) { if (message[messagecount] == '1') { if (sampleint % 2 == 0 && sampleint < 255) { sampleint++; } else sampleint = 255; } else if (messagecount < messageLength) { if (sampleint % 2 == 1 && sampleint < 255) { sampleint++; } else sampleint = 254; } messagecount++; } count++; writer.Write((byte)sampleint); } while ((sampleint = WaveStream.ReadByte()) >= 0) { writer.Write((byte)sampleint); } writer.Close(); } if (chkval != 1) { Image img = new Bitmap(pictureBox1.Image); this.SuspendLayout(); pictureBox1.Image.Dispose(); pictureBox1.Image = null; this.ResumeLayout(); img.Save(dlg.FileName, format); } } Page | 39
  • 40. } if (e.command == "decodeaudiofile") { BinaryWriter messageWriter = new BinaryWriter(new MemoryStream()); FileStream fs = new FileStream(e.args, FileMode.Open); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, (int)fs.Length); messageWriter.Write(buffer); messageWriter.Seek(0, SeekOrigin.Begin); Stream WaveStream = messageWriter.BaseStream; byte[] header = new byte[100]; WaveStream.Read(header, 0, 100); String outputstr = ""; int count = 0; int messagecount = 0; float keygen = get_key(myPassword); int advancesteps = (int)(keygen * 100); if (advancesteps < 50) advancesteps = 50; int msglnth=0; int pow=1; for (int i = 0; i < 6; i++) { msglnth += WaveStream.ReadByte() * pow; pow = pow * 10; } while (messagecount < msglnth) { int newdata = WaveStream.ReadByte(); if (count % advancesteps == 0) { if (newdata % 2 == 0) outputstr += '0'.ToString(); else outputstr += '1'.ToString(); messagecount++; } count++; } WaveStream.Close(); //MessageBox.Show(outputstr); int length_text = outputstr.Length; char[] original_val = outputstr.ToCharArray(); string coded_text = ""; int sum = 0; for (int i = 0; i <= length_text - 7; i = i + 8) { sum = 0; Page | 40
  • 41. char[] binvalue = { '0', '0', '0', '0', '0', '0', '0', '0' }; for (int j = 0; j <= 7; j++) binvalue[j] = original_val[i + j]; for (int j = 0; j <= 7; j++) { sum += (binvalue[j] - 48) * (int)(Math.Pow((double)2, (double)(7 - j))); } coded_text += ((char)sum).ToString(); } final_text = text_decrypt(coded_text.Length, myPassword.Length, coded_text.ToCharArray(), myPassword.ToCharArray()); } if (e.command == "textfile") { myTextFile = e.args.ToString(); BinaryWriter messageWriter = new BinaryWriter(new MemoryStream()); FileStream fs = new FileStream(e.args, FileMode.Open); byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, (int)fs.Length); messageWriter.Write(buffer); messageWriter.Seek(0, SeekOrigin.Begin); Stream MessageStream = messageWriter.BaseStream; int MessageBuffer; byte msg; while ((MessageBuffer = MessageStream.ReadByte()) >= 0) { msg = (byte)MessageBuffer; sampleStr += ((char)msg).ToString(); } text_encrypt(sampleStr.Length, myPassword.Length, sampleStr.ToCharArray(), myPassword.ToCharArray()); /*string text_line; while ((text_line = freader.Read().ToString()) != null) { char[] textline = text_line.ToCharArray(); int length_text = text_line.Length; char[] passwd = myPassword.ToCharArray(); int length_key = myPassword.Length; text_encrypt(length_text, length_key, textline, passwd); } freader.Close();*/ } if (e.command == "decodeimagefile") { Bitmap bitmap = (Bitmap)(new Bitmap(e.args)); string originalText = ""; float key = get_key(myPassword); Page | 41
  • 42. int codex = (int)((key * 1000000)%1000); int codey = (int)(key * 1000); int width = bitmap.Width; int height = bitmap.Height; if (codex > width) { while (codex > width) codex -= width; } if (codey > height) { while (codey > height) codey -= height; } if(codex == 0) codex = 2; if(codey == 0) codey = 4; decode myDecode = new decode(); originalText = myDecode.decrypt(codex, codey, bitmap); int length_text = originalText.Length; char[] original_val = originalText.ToCharArray(); string coded_text = ""; int sum = 0; for (int i = 0; i <= length_text - 7; i = i + 8) { sum = 0; char[] binvalue = { '0', '0', '0', '0', '0', '0', '0', '0' }; for (int j = 0; j <= 7; j++) binvalue[j] = original_val[i+j]; for (int j = 0; j <= 7; j++) { sum += (binvalue[j] - 48) * (int)(Math.Pow((double)2, (double)(7 - j))); } coded_text += ((char)sum).ToString(); } final_text = text_decrypt(coded_text.Length, myPassword.Length, coded_text.ToCharArray(), myPassword.ToCharArray()); Page | 42
  • 43. } if (e.command == "text") { myText = e.args.ToString(); int length_text = myText.Length; int length_key = myPassword.Length; char[] textline = myText.ToCharArray(); char[] passwd = myPassword.ToCharArray(); text_encrypt(length_text, length_key, textline, passwd); } if(e.command == "audiofile") { myAudioFile = e.args; } if (e.command == "imagefile") { myImageFile = e.args.ToString(); try { pictureBox1.Image = new Bitmap(myImageFile); } catch (Exception ex) { MessageBox.Show(ex.Message); } Bitmap bitmap = (Bitmap)pictureBox1.Image; int width = bitmap.Width; int height = bitmap.Height; float key = get_key(myPassword); int length = code_text.Length * 8; int blue = length % 100; int green = (length / 100) % 100; int red = (length / 10000) % 100; int codex = (int)((key * 1000000)%1000); int codey = (int)(key * 1000); if (codex > width) { while (codex > width) codex -= width; } if (codey > height) { while (codey > height) codey -= height; } Page | 43
  • 44. Color pixelcolor; pixelcolor = bitmap.GetPixel(codex, codey); pixelcolor = Color.FromArgb(red, green, blue); length = code_text.Length * 8; generate_bincodes(); if(codex == 0) codex = 2; if(codey == 0) codey = 4; bitmap.SetPixel(codex, codey, pixelcolor); if (length > (width * height) - 1) { MessageBox.Show("Text too large !!!"); Application.Exit(); } char[] text = mybinarycode_final.ToCharArray(); encode myCode = new encode(); bitmap = myCode.encrypt(codex,codey,length,text,bitmap); } } private void generate_bincodes() { stack s = new stack(); char ch; int i=0, j=0, k, temp; int myLength = code_text.Length; char[] codedText = code_text.ToCharArray(); while(i<myLength) { int count = 0; s.initial(); temp = (int)codedText[i]; while(temp!=0) { k = temp%2; s.push(k); count++; temp/=2; } Page | 44
  • 45. if(count<8) for(int y=count;y<8;y++) s.push(0); mybinarycode_final += s.display(); i++; j++; } } private void text_encrypt(int length_text, int length_key, char[] text, char[] key) { int i = 0, j = 0; char temp; while (i < length_text) { if (j >= length_key) j = 0; if ((text[i] + key[j]) < 255) temp = (char)(text[i] + key[j]); else temp = (char)(text[i] + key[j] - 256); code_text += temp.ToString(); i++; j++; } } private string text_decrypt(int length_text, int length_key, char[] text, char[] key) { string final = ""; int i = 0, j = 0; char temp; while (i < length_text) { if (j >= length_key) j = 0; if ((text[i] - key[j]) < 255) temp = (char)(text[i] - key[j]); else temp = (char)(text[i] - key[j] - 256); final += temp.ToString(); i++; j++; } return (final); } Page | 45
  • 46. private float get_key(string pwd) { int k = 0, i = 0, j = 0; float[] prob ={ 0.08f, 0.02f, 0.03f, 0.03f, 0.12f, 0.02f, 0.02f, 0.05f, 0.08f, 0.01f, 0.01f, 0.04f, 0.03f, 0.07f, 0.08f, 0.02f, 0.01f, 0.06f, 0.06f, 0.06f, 0.03f, 0.01f, 0.02f, 0.01f, 0.02f, 0.01f }; float[] range_to ={ 0.08f, 0.1f, 0.13f, 0.16f, 0.28f, 0.30f, 0.32f, 0.37f, 0.45f, 0.46f, 0.47f, 0.51f, 0.54f, 0.61f, 0.69f, 0.71f, 0.72f, 0.78f, 0.84f, 0.9f, 0.93f, 0.94f, 0.96f, 0.97f, 0.99f, 1.00f }; float[] range_from ={ 0.00f, 0.08f, 0.1f, 0.13f, 0.16f, 0.28f, 0.30f, 0.32f, 0.37f, 0.45f, 0.46f, 0.47f, 0.51f, 0.54f, 0.61f, 0.69f, 0.71f, 0.72f, 0.78f, 0.84f, 0.90f, 0.93f, 0.94f, 0.96f, 0.97f, 0.99f }; float low = 0.00f, high = 1.00f, diff = 1.00f; int x = 0; char[] mypassword = pwd.ToCharArray(); int pwdlength = pwd.Length; while (k < pwdlength) { if (((int)mypassword[k] >= 97) && ((int)mypassword[k] <= 122)) x = (int)mypassword[k] - 97; else if (((int)mypassword[k] >= 65) && ((int)mypassword[k] <= 90)) x = (int)mypassword[k] - 65; diff = high - low; high = low + diff * range_to[x]; low = low + diff * range_from[x]; k++; } return (low); } private void axShockwaveFlash1_Enter(object sender, EventArgs e) { } } } ENCODE.CS Page | 46
  • 47. using System; using System.Collections.Generic; using System.Text; using System.Drawing; namespace Steganography { class encode:Stegnos { public Bitmap encrypt(int x, int y, int length, char[] text,Bitmap bitmap) { Color pixelcolor = new Color(); int width = bitmap.Width; int height = bitmap.Height; int[,] transformmatrix = new int[1300, 1300]; int[,] rotatematrix = new int[1300, 1300]; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { transformmatrix[i, j] = 0; rotatematrix[i, j] = 0; } } transformmatrix[x, y] = 3; int row = 0, col = 0, xprob = 0, yprob = 0, xadd = 0, yadd = 0; row = bitmap.Height; col = bitmap.Width; xprob = x; yprob = y; if (yprob % 2 == 1) yadd = yprob - 1; else yadd = yprob; if (xprob % 2 == 1) xadd = xprob - 1; else xadd = xprob; if (row % 2 == 0) row--; if (col % 2 == 0) col--; Page | 47
  • 48. if (xadd == 0) xadd = 2; if (yadd == 0) yadd = 4; int red, green, blue; int flag = 0; for (int i = 0; i < length; i++) { flag++; x += xadd; while (x >= col) x -= col; y += yadd; while (y >= row) y -= row; if (transformmatrix[x, y] != 0) { y++; if (y >= row) y = 0; } pixelcolor = bitmap.GetPixel(x, y); red = pixelcolor.R; green = pixelcolor.G; blue = pixelcolor.B; if (text[i] == '0') { transformmatrix[x, y] = 2; rotatematrix[x, y] = flag % 3; switch (rotatematrix[x, y]) { case 1: if (red == 0) { red = 2; } else if (red % 2 == 1) { if (red == 255) red--; else red++; } pixelcolor = Color.FromArgb(red, green, blue); bitmap.SetPixel(x, y, pixelcolor); break; case 2: Page | 48
  • 49. if (green == 0) { green = 2; } else if (green % 2 == 1) { if (green == 255) green--; else green++; } pixelcolor = Color.FromArgb(red, green, blue); bitmap.SetPixel(x, y, pixelcolor); break; case 0: if (blue == 0) { blue = 2; } else if (blue % 2 == 1) { if (blue == 255) blue--; else blue++; } pixelcolor = Color.FromArgb(red, green, blue); bitmap.SetPixel(x, y, pixelcolor); break; } } else if (text[i] == '1') { transformmatrix[x, y] = 1; rotatematrix[x, y] = flag % 3; switch (rotatematrix[x, y]) { case 1: if (red % 2 == 0) { if (red == 0) red++; else red--; pixelcolor = Color.FromArgb(red, green, blue); bitmap.SetPixel(x, y, pixelcolor); } Page | 49
  • 50. break; case 2: if (green % 2 == 0) { if (green == 0) green++; else green--; pixelcolor = Color.FromArgb(red, green, blue); bitmap.SetPixel(x, y, pixelcolor); } break; case 0: if (blue % 2 == 0) { if (blue == 0) blue++; else blue--; pixelcolor = Color.FromArgb(red, green, blue); bitmap.SetPixel(x, y, pixelcolor); } break; } } } return (bitmap); } } } DECODE.CS using System; using System.Collections.Generic; using System.Text; using System.Drawing; Page | 50
  • 51. using System.Windows.Forms; namespace Steganography { class decode:Stegnos { public string decrypt(int x,int y,Bitmap bitmap) { string final = ""; Color pixelcolor = new Color(); pixelcolor = bitmap.GetPixel(x, y); int textlength = (pixelcolor.R * 10000) + (pixelcolor.G * 100) + pixelcolor.B; pixelcolor = Color.FromArgb(pixelcolor.R, pixelcolor.G, 0); bitmap.SetPixel(x, y, pixelcolor); int width = bitmap.Width; int height = bitmap.Height; int row = 0, col = 0, xprob = 0, yprob = 0, xadd = 0, yadd = 0; row = bitmap.Height; col = bitmap.Width; xprob = x; yprob = y; if (yprob % 2 == 1) yadd = yprob - 1; else yadd = yprob; if (xprob % 2 == 1) xadd = xprob - 1; else xadd = xprob; if (row % 2 == 0) row--; if (col % 2 == 0) col--; if (xadd == 0) xadd = 2; if (yadd == 0) yadd = 4; int k = 0; char[] outputstring = new char[textlength]; for (int i = 0; i < textlength; i++) { Page | 51
  • 52. k++; x += xadd; while (x >= col) x -= col; y += yadd; while (y >= row) y -= row; pixelcolor = bitmap.GetPixel(x, y); int red = pixelcolor.R; int green = pixelcolor.G; int blue = pixelcolor.B; switch (k % 3) { case 1: if (red == 0) { y++; if (y >= row) y = 0; } if (red % 2 == 0) outputstring[i] = '0'; else outputstring[i] = '1'; red = 0; pixelcolor = Color.FromArgb(red, green, blue); bitmap.SetPixel(x, y, pixelcolor); break; case 2: if (green == 0) { y++; if (y >= row) y = 0; } if (green % 2 == 0) outputstring[i] = '0'; else outputstring[i] = '1'; green = 0; pixelcolor = Color.FromArgb(red, green, blue); bitmap.SetPixel(x, y, pixelcolor); break; case 0: if (blue == 0) { y++; if (y >= row) y = 0; } if (blue % 2 == 0) outputstring[i] = '0'; Page | 52
  • 53. else outputstring[i] = '1'; blue = 0; pixelcolor = Color.FromArgb(red, green, blue); bitmap.SetPixel(x, y, pixelcolor); break; } } for (int i = 0; i < textlength; i++) { final += outputstring[i].ToString(); } return (final); } } } Page | 53