You are on page 1of 34

62

Chapter 4

IMAGE STEGANOGRAPHY-
ROTATOCRYPT
63

CHAPTER 4

Chapter 4: IMAGE STEGANOGRAPHY- ROTATOCRYPT

S. No. Name of the Sub-Title Page No.


4.1 Overview of JPEG Compression 66
4.1.1 Color space transformation 67
4.1.2 Downsampling 67
4.1.3 Block splitting 67
4.1.4 DCT 68
4.1.5 Quantization 68
4.1.6 Entropy coding 68
4.2 Rotatocrypt 69
4.2.1 Password analysis 69
4.2.2 Encryption and Decryption 71
4.3 Partial Decoding Technique 72
4.3.1 Analyzing Password 73
4.3.2 Generating CheckVal 73
4.3.3 Encrypting data 73
4.3.4 Initializing image reading 74
4.3.5 Processing of miscellaneous markers and 74
segments
4.3.6 Processing of frame header information 75
4.3.7 Processing of miscellaneous markers and 75
segments (Repeated)
4.3.8 Processing of scan header information 76
4.3.9 Decoding and modifying 8x8 blocks from 76
compressed scan data
4.3.10 Writing back the modified 8 x 8 blocks as 77
compressed scan data to output image file
4.3.11 Decoding and extracting the length of the hidden 78
data
4.3.12 Decoding and extracting the actual hidden data 79
64

4.3.13 Decrypting the extracted data (2nd part of 79


Rotatocrypt)
4.3.14 Generating and checking CheckVal for the 80
extracted data
4.4 Experimental Work and Results 80
4.4.1 Evaluation of JPEG Image quality & 87
performance measure
4.5 Advantages 95
4.6 Conclusions 95
65

4. IMAGE STEGANOGRAPHY- ROTATOCRYPT

SteganPEG is an application of image Steganography. It hides

files in a JPEG image. This chapter proposes the new “Rotatocrypt”

algorithm, which is used to encrypt and decrypt compressed data, and

the “Partial decoding” Steganography technique that can be used with

JPEG images.

SteganPEG is an image Steganography application which

operates on JPEG images. It combines the advantages of both

Cryptography and Steganography in a single application. The main

reason for choosing JPEG as the image file format supported by this

application is that it is the most popular format today among Internet

users, because it takes up much less space than other formats for the

same image. Hence we can find several images in the World Wide Web

in this format [88]. In order to save more data into an image,

SteganPEG performs data compression/decompression before actually

performing the Steganography. SteganPEG performs the following

steps while hiding files into a JPEG image.

i) It encrypts the compressed data using a new Cryptography

algorithm introduced, “Rotatocrypt”.

ii) It performs the actual Steganography on the input image to give

the output image with the compressed files hidden in it, using

the “Partial decoding of JPEG” technique.


66

While extracting files back from a JPEG image, it performs the

following steps:

i) It extracts the encrypted compressed files data from the JPEG

image using “Partial decoding” technique.

ii) Then it decrypts the extracted data back to the compressed

data, again using “Rotatocrypt”.

4.1 OVERVIEW OF JPEG COMPRESSION

This overview briefly covers the JPEG compression technology

used in baseline sequential DCT JPEG files which are supported by

SteganPEG. The baseline sequential DCT JPEG compression is the

most widely used variant of JPEG compression techniques because it

is simpler and easier to implement than other techniques specified in

the JPEG standard. It is a lossy compression technique. The file format

is known as JPEG Interchange Format (JIF). This pure file format is

used rarely, the main reason being the use of different programming

decoders and encoders [88]. Hence, SteganPEG uses a file interchange

format to store the JPEG compressed data, called JPEG File

Interchange Format (JFIF). As per the documentation from JFIF

standard, JFIF is a basic file format which permits JPEG bit flows to

be swapped between a broad variety of applications and platforms [89].

Compressing an image to JPEG format is also called encoding, and

decompressing back to original image is also called decoding.


67

The encoding of a JPEG image consists of the following steps

[98, 100]:

i) Color space transformation

ii) Down sampling

iii) Block splitting

iv) DCT

v) Quantization

vi) Entropy coding

4.1.1 Color space transformation

The cover image that is converted from RGB color space to

distinct color space is called YCbCr. In this, brightness of a pixel is

represented by “Y” and chrominance is represented by “Cb” and “Cr”.

4.1.2 Downsampling

In this stage, high compression is enabled by reducing the

spatial resolution of the Cb and Cr component. This is also called

chroma subsampling.

4.1.3 Block splitting

After sub-sampling, each carrier is broken into 8 x 8 blocks.

Trusting on chroma sub-sampling, this gives the various size

Minimum Coded Unit (MCU) blocks.


68

4.1.4 DCT

Here, each 8 x 8 block of each element is changed to a

representation of frequency-domain, using a normalized, two-

dimensional type-II DCT.

4.1.5 Quantization

In this stage, a constant divides each element in the frequency

domain, specified by a Quantization Table. This is the actual lossy

process, since the division involves rounding of the result to an integer.

This results in rounding of many high proficiency components to zero

and the remaining become negative or positive numbers, which accept

many lesser bits to represent.

4.1.6 Entropy coding

It is the final stage of the entire encoding process. In this stage,

the coefficients in the 8 x 8 block are organized in a zigzag fashion. The

first of this block is titled the DC coefficient and the remaining are

titled as AC coefficients. Then, Run Length Encoding (RLE) method is

applied that group’s identical frequencies concurrently, embedding

length coding zeroes, and then Huffman coding is done on what is

remaining.

The decoding process to display the image back from a JPEG file

consists of doing all the above in reverse. As said earlier, only the

quantization step is irreversible, and hence yields different values than

that in the original image. The decoding consists of:


69

i) Taking the DCT coefficient matrix

ii) Multiplying each entry in the matrix with that corresponding

quantization matrix

iii) Applying Inverse Discrete Cosine Transform (IDCT)

iv) Shiftng the values to positive range back

SteganPEG does not use all the previously mentioned stages to

decode and add the data to the image. It uses only the last stage, i.e.,

entropy coding. It initially decodes the compressed data to 8x8 blocks;

either embeds data into those blocks or extracts data from those

blocks, and writes the modified block back using entropy coding.

4.2 ROTATOCRYPT

SteganPEG uses a new Cryptography technique introduced in

this chapter, called “Rotatocrypt”. The rotatocrypt algorithm, as its

name says, encrypts or decrypts the data bytes only using rotations.

The rotations strictly depend on the password given. Hence, the data

modified after rotation strictly depends on the password given. The

encryption/decryption process using rotatocrypt consists of the

following stages:

1) Password analysis

2) Encryption / Decryption

4.2.1 Password analysis

In this stage, the password is broken into convenient form that

facilitates performing of encryption and decryption.


70

i) First, the ASCII value representations of each of the letters of

the password are taken. Though ASCII codes are 7-bits wide,

due to convenience of representation in computers, 8 bits,

i.e., a byte is used to represent an ASCII character.

ii) Next, the 8-bit representations of each of the ASCII codes are

taken.

iii) The bit representations of all the successive ASCII codes of

the password letters are merged to produce a single long bit

string.

iv) The long bit string is now divided into bit strings of each of

length 3, so that the maximum unsigned value represented

by such a bit string is 7. If the last bit string obtained from

the long bit string does not span 3 bits, no additional bits are

padded. Instead, the value is taken as it is.

v) Each of these unsigned 3-bit strings are stored in a list called

“PassStore”.

vi) The order of the strings in the entire PassStore list is

reversed.

The main reason for dividing the entire long bit string into bit

strings of length 3 is that the maximum possible 3-bit value is 7 and

the values guide in rotating the bits of the bytes. A byte consists of 8

bits and can be rotated in 8 ways in a single direction, rotating 0 to 7

times.
71

4.2.2 Encryption and Decryption

Encryption: The encryption of a message byte is performed by right

shifting the bits as guided by the three-bit values in PassStore. The

three-bit values are taken from the PassStore sequentially to right

rotate successive bytes in a data stream. When all the three-bit values

are taken, the next value is taken again from the beginning of

PassStore list to right rotate the next byte. Thus, each byte is right

shifted the three-bit value of times. This transforms the entire data

bytes into completely different form which cannot be decrypted without

a correct password.

Decryption: The decryption of a data byte is the reverse process of

encryption process explained above. Again, the same three-bit values

are taken from the PassStore sequentially to left rotate successive

bytes in the encrypted data stream. When all the three-bit values are

taken, the next value is taken again from the beginning of PassStore

list to left rotate next encrypted byte. Thus, each encrypted byte is left

rotated the three-bit value number of times. This transforms the entire

encrypted data bytes into the original data back, provided the

password used to construct the PassStore list is correct. Thus, the

encrypted data gets decrypted to correct form only when the order of

the three-bit values matches with that of used during encryption. The

order of the three-bit values depends on the password entered. Thus,

the decryption process succeeds only when correct password is

provided.
72

4.3 PARTIAL DECODING TECHNIQUE

The “Partial Decoding” technique is used to perform

Steganography on the JPEG images by SteganPEG. This is the key part

of the entire process which hides the data files inside the JPEG image,

in a way that the output JPEG image doesn’t significantly get affected

both in terms of quality and quantity (size). The partial decoding

technique uses the last stage of JPEG encoding (which is same as the

first stage of JPEG decoding), to modify the image according to the

data to be hidden. The process of hiding the data bytes into a JPEG

image can be described as consisting of following steps:

Step-1: Analyzing password (1st part of Rotatocrypt).

Step-2: Generating CheckVal from the data to be hidden.

Step-3: Encrypting the data (2nd part of Rotatocrypt)

Step-4: Initializing image reading.

Step-5: Processing of miscellaneous markers and segments.

Step-6: Processing of frame header information.

Step-7: Processing of miscellaneous markers and segments.

Step-8: Processing of scan header information.

Step-9: Decoding and modifying 8 x 8 blocks from compressed scan

data.

Step-10: Writing back the modified 8 x 8 blocks as compressed scan

data to output image file.

The above steps are discussed in detail below:


73

4.3.1 Analyzing Password

In this stage, the password provided by the user is analyzed as

described above in Rotatocrypt. From this, a list called PassStore,

consisting of unsigned three-bit values, is obtained.

4.3.2 Generating CheckVal

After analyzing the password, a value known as CheckVal is

produced from the message bits; it is used to verify the correctness of

the password during decryption. Initially, the LSBs of the message

bytes are collected one after another and grouped as 8-bit values. If the

last set of bit string does not contain 8-bits no padding is done. Then,

the sum of all such 8-bit values is calculated. Finally, the first 8-bits

beginning from the LSB towards the Most Significant Bit (MSB) of the

calculated sum, which is taken in reverse order, gives the CheckVal.

Considering the data to be hidden as an array of bytes, the array

size plus one (the size of CheckVal being 1 byte) is inserted into the

array at the beginning of the array. It spans first four bytes of the

array. The CheckVal byte is added at the ending of the array. Thus, the

entire message to be hidden now contains the actual length of the data

to be hidden as the first four bytes followed by the actual data bytes

and CheckVal byte as its ending byte.

4.3.3 Encrypting data

The data bytes are now encrypted using the Rotatocrypt

algorithm described above, using the values from PassStore. Thus, the
74

actual data to be hidden, along with the actual length of data and the

CheckVal is encrypted.

4.3.4 Initializing image reading

A boolean flag named DataEnded is used to indicate the status

of the data embedded. If it is true, then it implies all the data to be

hidden are written to image. Otherwise, more data bytes are yet to be

written to the image. Initially, this flag bit is set to false. The Bitcode

values and the category values that are used in entropy coding stage of

JPEG compression are loaded now.

At this stage, the given source image is checked for its validity by

reading its Start Of Image (SOI) marker. If it is a valid start of image

marker, then it is also copied to the output image file and the

processing continues.

4.3.5 Processing of miscellaneous markers and segments

Next, the restart interval is set to 0. From here, until a Start Of

Frame (SOF) marker is found in the source image data, all the markers

and their corresponding segments are copied to the resulting image.

The typical markers and associated segments processed are:

i) Define Huffman Table (DHT)

ii) Define Quantization Table (DQT)

iii) Define Restart Interval (DRI)

iv) Application Specific (APPS)

v) Comment (COM)

vi) Restart Marker (RST)


75

These segments usually contain the tables used in JPEG

compression process [90]. Since the SteganPEG application can

process only JPEG images, which are usually found in the Internet, a

SOF0 (Start of Frame 0) marker is expected. If a valid SOF0 marker is

found, then the processing of the frame segment in the cover image

that follows the SOF0 marker is carried out.

4.3.6 Processing of frame header information

To process the frame segment, all the frame headers from the

source image are read and decoded and the information is stored in

the suitable data structure. The data gathered from the headers are

about the cover image, such as the width and height of the image, the

number of components, the image precision etc. These data are

concurrently inserted into resulting image. From the collected header

data, the numbers of vertical and horizontal Minimum Coded Units

(MCU) are calculated.

4.3.7 Processing of miscellaneous markers and segments

(Repeated)

After processing the frame header, any associated segments and

the other markers, if present, are processed while concurrently copying

them to the resulting image. The markers that may be encountered are

given in step 4.3.5. This procedure is continued until a Start of Scan

marker is found which points to the starting of the scanned segment.


76

4.3.8 Processing of scan header information

Now, the scan headers are read and decoded from the source

image to obtain the scan segment particular data. It typically includes

the component identifiers of the components included in the scan, the

quantization and the Huffman table identifiers of the tables used to

decode each bit of information, etc. These are also inserted into

resulting image file concurrently.

4.3.9 Decoding and modifying 8 x 8 blocks from compressed scan

data

Now, SteganPEG reads and decodes 8 x 8 blocks as defined in

the JPEG standard, from the compressed scan data. This is the stage

where the data to be hidden are inserted. The coefficients present in

the block are modified according to the data to be hidden. As

mentioned earlier in the overview of JPEG compression, the two

different coefficients in the block are namely DC and AC. Any

modifications are made only to AC coefficients because any

modification to the DC coefficient influences the quality of the resulting

image. All the AC coefficients are processed and embedded with the

bits of secret information bytes concurrently.

First, the information bit to be embedded from the information

byte array is obtained to insert into AC coefficient. Each AC coefficient

in the block is connected with a Category value and a Huffman code as

defined in the JPEG standard. The LSB of the Huffman code of the AC

coefficient is found. All the coefficients in the equal type occupy the
77

equal number of bits in the compressed information. In order do not

modify the size of the resulting image; the AC coefficient must be

modified so that it stays in the same category as its original. When the

LSB of the Huffman code of the AC coefficient and the secret message

bit are 0 or 1, i.e., both are equal, then no change is needed. Changes

are done only when they are not equal. If the next information bit is 1

and LSB of the code bit is 0, then the AC value is incremented by 1.

Else if the next information bit is 0 and LSB of the code bit is 1, then

the AC value is decremented by 1. In this procedure, the AC coefficient

values are incremented and decremented as needed such that the

changed values further hold in the same category.

4.3.10 Writing back the modified 8 x 8 blocks as compressed

scan data to output image file

After changing all the DC values according to the message to be

hidden, the block is subjected to entropy coding as defined in the

JPEG standard and the compressed data are written to the output

image file. Though this compressed data are not the same as the

original, the size of the data is not modified and since the AC

coefficients always stay in the same category, the change in the quality

of the output image is negligible.

The steps 4.3.9 and 4.3.10 are repeated until all the data to be

embedded are written into the image or end of the image is reached.

Last, if all the information bits are successfully hidden in the blocks,
78

DataEnded flag is set to true indicating success and this completes the

process of hiding the data in the JPEG image.

The process of retrieving the embedded information back from

the image consists of the following steps:

Step-1: Analyzing password (1st part of Rotatocrypt).

Step-2: Initializing image reading.

Step-3: Processing of miscellaneous markers and segments.

Step-4: Processing of frame header information.

Step-5: Processing of miscellaneous markers and segments.

Step-6: Processing of scan header information.

Step-7: Decoding and extracting the length of the hidden data.

Step-8: Decoding and extracting the actual hidden data.

Step-9: Decrypting the extracted data (2nd part of Rotatocrypt).

Step-10: Generating and checking CheckVal for the extracted data.

The first 6 steps noted above are same as the steps discussed

previously under hiding the data into the image, with an exception that

the miscellaneous segments and other header information need not be

written to any other image as was done previously. The description

continues with the 7th step, “Decoding and extracting the length of the

hidden data”.

4.3.11 Decoding and extracting the length of the hidden data

From the previous analysis relating to the embedding of message

bytes in the cover image, the first 4 bytes in the byte array hold the
79

length of the entire message byte array plus one (CheckVal’s size being

1 byte). Hence, initially, the first 4 bytes are extracted. To do this, an 8

x 8 block is decoded from the compressed scan data in the image file.

Since the DC coefficients were not considered while embedding the

secret message, the same is applicable while retrieving the secret

message. For every AC coefficient in the 8 x 8 block, the LSB of its

Huffman code is extracted. As 8 bits are collected, a byte is obtained.

Thus, the first 4 bytes can be extracted from the successive

coefficients. But, these are in encrypted form. So, they are decrypted

using the Rotatocrypt algorithm. On decryption, the length of the data

ahead to be extracted is known.

4.3.12 Decoding and extracting the actual hidden data

Now, the length of the message to be retrieved is known, which

is followed by the decoding of 8 x 8 blocks of the cover image until all

the message bytes are scanned from them. The bytes are read in the

same manner as the previous step.

4.3.13 Decrypting the extracted data (2nd part of Rotatocrypt)

At this stage, the data extracted are in encrypted form. Hence,

the data are decrypted using the Rotatocrypt algorithm discussed

previously. Since, already, the first four bytes, holding the length of the

message, are decrypted, they are removed from the byte array and only

the rest of the data bytes are decrypted.


80

4.3.14 Generating and checking CheckVal for the extracted data

After the data bytes are decrypted, the final byte is the CheckVal

of the leftover message bytes. So, the final byte is removed and a new

CheckVal is generated for the remaining bytes, in the similar fashion,

as was done while embedding the message in the cover image. If the

produced CheckVal and the CheckVal that earlier existed as the last

byte are equal, then the message decrypted is correct and hence the

given password is correct. Otherwise, the message decrypted is not

correct, producing distinct CheckVal. Thus, it is guaranteed that the

password is correct only if two values are matched. Then, the entire

secret messages decrypted are valid only if the given password is

correct.

4.4 EXPERIMENTAL WORK AND RESULTS

This section presents and discusses the experimental work and

results using the SteganPEG. It may be helpful to look at some screen

shots of the program at various points in its progress. This is the main

form of SteganPEG software. It is used for both processes “hiding” and

“unhiding” secret data. The cover images tested in the present

experiment are shown in Fig. 4.12. Fig. 4.13 shows the resulting stego

images and the resulting MSE, PSNR and Correlation values have been

calculated using MATLAB and are listed in Table 4.1.


81

Fig. 4.1: Main Form

Fig. 4.2: Encode Form at Sender Side


82

Fig. 4.3: Files to be hidden

Fig. 4.4: Saving a Stego Image


83

Fig. 4.5: Decode Form at Receiver Side

Fig. 4.6: Stego Image selected


84

Fig. 4.7: Displaying the author name

Fig. 4.8: Selected Stego Image in which Files was hidden


85

Fig. 4.9: Hidden Files Extracted

Result:

Source Files:

1. Class1.vb (36.4 KB)

2. Paper Format (MS-Word) (18.8 KB)

Original Cover Image: penguins.jpg (759 KB)

Password: BALAJI

Stego Image: 759 KB (Same Size)


86

Fig. 4.10: Cover Image (Image before hiding the Files)

Fig. 4.11: Stego Image (Image after hiding the Files)


87

4.4.1 Evaluation of JPEG Image quality & performance measure

A measure of image quality is required inorder to compare cover

image with stego image. The most well known used measures are

PSNR and MSE. The PSNR and MSE values for StegnPEG application

are estimated and are given below. Histograms for various stego

images are also estimated.

The eight standard color images (“Cover_Leena.jpg”,

“Cover_Peppers.jpg”, “Cover_Baboon.jpg”, “Cover_Barbara.jpg”,

“Cover_Zelda.jpg”, “Cover_Aeroplane.jpg”, “Cover_Couple.jpg”,

“Cover_House.jpg”) are used in this experiment.

MSE:

The MSE between stego image and cover image is given by Eq.

(1.2). MSE is a risk function, corresponding to expected value of

the quadratic loss or squared error loss. The average of the squares of

the "errors" is measured by MSE. The error is the quantity by which

the value implied by the estimator differs from the amount to be

estimated.

PSNR:

The PSNR between cover image and stego image is given by Eq.

(1.3). A higher PSNR signifies that the quality of the stego image is

similar to the cover image. The images in Fig. 4.12 are very similar to

those in Fig. 4.13 and cannot be distinguished with human eye.


88

(a) (b)

(c) (d)

(e) (f)
89

(g) (h)
Fig. 4.12: Eight cover images
(a) Cover_Leena.jpg (b) Cover_Peppers.jpg
(c) Cover_Baboon.jpg (d) Cover_Barbara.jpg
(e) Cover_Zelda.jpg (f) Cover_Aeroplane.jpg
(g) Cover_Couple.jpg (h) Cover_House.jpg

(a) (b)
90

(c) (d)

(e) (f)

(g) (h)
Fig. 4.13: Eight Stego images

(a) Stego_Leena.jpg (b) Stego_Peppers.jpg


(c) Stego_Baboon.jpg (d) Stego_Barbara.jpg
(e) Stego_Zelda.jpg (f) Stego_Aeroplane.jpg
(g) Stego_Couple.jpg (h) Stego_House.jpg
91

Table 4.1: Experimental results for the proposed


Steganographic Technique
Name of Size of Embedde Embed Name of Size of MSE PSNR
the Cover the d File ded the Stego the (dB)
Image Cover Name Data Image Stego
Image (Bytes) Image
(Bytes) (Bytes)
Cover_Leena. 990208 Pno.docx 28672 Stego_Leen 990208 0.3191 53.0919
jpg a.jpg
Cover_Pepper 467968 Class1.vb 37888 Stego_Pepp 467968 0.5020 51.1241
s.jpg ers.jpg
Cover_Baboo 749568 Steganogra 30720 Stego_Babo 749568 2.1883 44.7298
n.jpg phy.pdf on.jpg

Cover_Barba 595968 Literature. 40960 Stego_Barb 595968 0.2677 53.8550


ra.jpg txt ara.jpg
Cover_Zelda.j 574464 CINSTXFR. 19456 Stego_Zeld 574464 0.2115 54.8767
pg EXE a.jpg

Cover_Aeropl 850944 SETARGV. 17408 Stego_Aero 850944 0.0454 61.5637


ane.jpg ASM plane.jpg

Cover_Coupl 782336 mp3read. 12288 Stego_Cou 782336 0.1043 57.9469


e .jpg m ple.jpg
Cover_House 723968 Sample.ht 15360 Stego_Hou 723968 0.0516 61.0036
.jpg ml se.jpg

Histogram

An histogram is a bar chart that shows the distribution of

intensities in an intensity or indexed image. Color images are

considered for experimentation; Fig.4.14, 4.15 and 4.16 show the

evaluated histograms for Red, Green and Blue components

respectively, for the cover image “Cover_Leena.jpg” and stego image

“Stego_Leena.jpg”. Fig.4.17, Fig.4.18 and Fig.4.19 show the evaluated

histograms for RGB components of the cover image

“Cover_Peppers.jpg” and stego image “Stego_Peppers.jpg”. Fig.4.20,

Fig.4.21 and Fig.4.22 show the evaluated histograms for RGB

components of the cover image “Cover_Baboon.jpg” and stego image

“Stego_Baboon.jpg”.
92

Fig. 4.14: Red component of Cover_Leena.jpg and Stego_Leena.jpg

Fig. 4.15: Green component of Cover_Leena.jpg and


Stego_Leena.jpg

Fig. 4.16: Blue component of Cover_Leena.jpg and Stego_Leena.jpg


93

Fig. 4.17: Red component of Cover_Peppers.jpg and


Stego_Peppers.jpg

Fig. 4.18: Green component of Cover_Peppers.jpg and


Stego_Peppers.jpg

Fig. 4.19: Blue component of Cover_Peppers.jpg and


Stego_Peppers.jpg
94

Fig. 4.20: Red component of Cover_Baboon.jpg and


Stego_Baboon.jpg

Fig. 4.21: Green component of Cover_Baboon.jpg and


Stego_Baboon.jpg

Fig. 4.22: Blue component of Cover_Baboon.jpg and


Stego_Baboon.jpg
95

4.5 ADVANTAGES

SteganPEG combines the power of Cryptography and

Steganography. Since the data are encrypted using a password, before

being hidden into the image, the steganalysis becomes very difficult. It

uses a new cryptographic algorithm “Rotatocrypt” that involves

rotations, and is fast as well as secure because the rotations entirely

depend on the password. This application also takes care to see that

the quality and size of the output JPEG image is almost identical to

that of the original JPEG image. Since the data to be hidden could be

anything, it is also able to store multiple files combined into a single

byte array, into a single JPEG image, thus treating the image as a

place holder for files. Since this application compresses the data before

hiding, more data can be stored within a small image.

4.6 CONCLUSIONS

JPEG is the widely used image file format across the Internet

and in digital cameras. At present the JPEG format has been widely

used to send secret data also. Experimental results exhibit that our

application accomplishes high hiding capacity without changing the

size of the image while maintaining high security and good image

quality. The main advantage of this application is that we can hide

multiple files at a time without changing the image quality. Hence, the

proposed method will become one of the most powerful methods in

information hiding of secret communications.

You might also like