0% found this document useful (0 votes)
56 views

Text Hiding System

The document discusses hiding text files within audio files using low bit encoding steganography. It describes the existing and proposed systems for hiding information in digital files like images, video and audio. It provides details on the various modules, architecture, data flow, use case, sequence and class diagrams for a proposed steganography system.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
56 views

Text Hiding System

The document discusses hiding text files within audio files using low bit encoding steganography. It describes the existing and proposed systems for hiding information in digital files like images, video and audio. It provides details on the various modules, architecture, data flow, use case, sequence and class diagrams for a proposed steganography system.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 54

Text File Hiding In Audio Files Using Low Bit Encoding Steganography.

Abstract

Steganography is the practice of hiding private or sensitive information within something


that appears to be nothing out of the usual. Steganography is often confused with cryptology
because the two are similar in the way that they both are used to protect important information.
The difference between the two is that Steganography involves hiding information so it appears
that no information is hidden at all. If a person or persons views the object that the information is
hidden inside of he or she will have no idea that there is any hidden information, therefore the
person will not attempt to decrypt the information.

Steganography in the modern day sense of the word usually refers to information or a file
that has been concealed inside a digital Picture, Video or Audio file. What Steganography
essentially does is exploit human perception, human senses are not trained to look for files that
have information hidden inside of them, although there are programs available that can do what
is called Steganalysis (Detecting use of Steganography.)

The most common use of Steganography is to hide a file inside another file. When
information or a file is hidden inside a carrier file, the data is usually encrypted with a password.
Existing System

 When files are created there are usually some bytes in the file that aren't really needed, or
at least aren't that important. These areas of the file can be replaced with the information
that is to be hidden, without significantly altering the file or damaging it.
 Injection is quite a simple method which simply involves directly injecting the secret
information into the carrier file. The main problem with this method is that it can
significantly increase the size of the carrier file.
 In cryptography, the individuals perceive the information by considering the implied
information but they will not be able to realize the information.
 Steganography become more important as more people join the cyberspace revolution.
 Military communications system make increasing use of traffic security technique which,
rather than merely concealing the content of a message using encryption, seek to conceal
its sender, its receiver or its very existence.
Disadvantages:
 It can significantly increase the size of the carrier file.
 Existing system will not be able to realize the information.
 The file can be replaced with the information that is to be hidden, without
significantly altering the file or damaging it.
Proposed System

 The main goal of steganography is to communicate securely in a completely undetectable


manner and to avoid drawing suspicion to the transmission of a hidden data .It is not to
keep others from knowing the hidden information, but it is to keep others from thinking
that the information even exists.

 The main aim of steganography is to hide information in the other wrap media so that
other persons will not observe the existence of the information.

 When hiding information inside Audio files the technique usually used is low bit
encoding which is some what similar to LSB that is generally used in Images.

 When only a small amount of information is hidden inside of video it generally isn’t
noticeable at all, however the more information that is hidden the more noticeable it will
become.

Advantages:
 The advantage of using video files in hiding information is to be added security
against hacker attacks due to the relative complexity of video compared to image
files and audio files.
 Other persons will not observe the existence of the information.
SYSTEM REQUIREMENTS

SOFTWARE REQUIREMENTS

• OPERATING SYSTEM :- WINDOWS 07& XP


• FRONT END :- VISUAL STUDIO 2008
• BACKEND :- SQL SERVER 2005
• PROGRAMMING LANGUAGE :- C#

HARDWARE REQUIREMENTS

• SYSTEM : PENTIUM IV
• HARD DISK : 40 GB
• RAM : 512 MB
• MONITOR : 17”MONITOR
Modules:

 File upload
 Attach with text file
 Searching
 Key generation

FILE UPLOAD:

In this process the file is uploaded to server and key server respectively. There are n
numbers of file uploaded to server and a key server. The upload file is stored in different storage
server which is randomly chosen by the user.

ATTACH TEXT FILE:

When the user is uploading the file, text file also attached with the original file. So, the
user file is secured in the database and can’t access another user easily.

SEARCHING:

When the user is need some file in the database, the user is searching from the database and
Retrieve the file from database.

KEY GENERATION:

When the user is extract the file from database, the user is gives the key. The key is randomly
generated.
Architecture Diagram:
Data Flow Diagram:
Use Case diagram:

Login

select audio

select the data to hide

user hide data

set key

send

Extract
Sequence Diagram:

login select Audio Select text to Hide the Data Set key receiver Extact
hide
select

send to logarthmic domain

hide

Encrypt
send
extract

Class Diagram:
Activity Diagram:

login

select audio

select data

Hide text encrypt

Send

Extract
INTRODUCTION:

Steganography is an art of sending hidden data or secret Messages over a public channel so that
a third party cannot detect the presence of the secret messages. The goal of steganography is
different from classical encryption, which Seeks to conceal the content of secret messages;
steganography is about hiding the very existence of the secret messages. Modern steganography
is generally understood to deal with electronic media rather than physical objects. There have
been numerous proposals for protocols to hide data in channels containing pictures video [3, 4],
audio and even typeset text. This makes sense for a number of reasons. First of all, because the
size of the information is generally quite small compared to the size of the data in which it must
be hidden (the cover text), electronic media is much easier to manipulate in order to hide data
and extract messages. Secondly, extraction itself can be automated when the data is electronic,
since computers can efficiently manipulate the data and execute the algorithms necessary to
retrieve the messages. Electronic data also often includes redundant, unnecessary and unnoticed
data spaces which can be manipulated in order to hide messages. The main goal of this paper was
to find a way so that an audio file can be used as a host media to hide textual message without
affecting the file structure and content of the audio file. Because degradation in the perceptual
quality of the cover object may leads to a noticeable change in the cover object which may leads
to the failure of objective of steganography.

LANGUAGE SPECIFICATION:

DOT NET TECHNOLOGY:

THE .NET FRAMEWORK:


The .NET Framework is a new computing platform that simplifies application
development in the highly distributed environment of the Internet.

OBJECTIVES OF. NET FRAMEWORK:


 To provide a consistent object-oriented programming environment whether
object codes is stored and executed locally on Internet-distributed, or executed
remotely.
 To provide a code-execution environment to minimizes software deployment and
guarantees safe execution of code.
 Eliminates the performance problems.

There are different types of application, such as Windows-based applications and Web-
based applications.

To make communication on distributed environment to ensure that code be accessed by


the .NET Framework can integrate with any other code.

COMPONENTS OF .NET FRAMEWORK:

THE COMMON LANGUAGE RUNTIME (CLR):

The common language runtime is the foundation of the .NET Framework. It manages
code at execution time, providing important services such as memory management, thread
management, and remoting and also ensures more security and robustness. The concept of code
management is a fundamental principle of the runtime. Code that targets the runtime is known as
managed code, while code that does not target the runtime is known as unmanaged code.

THE .NET FRAME WORK CLASS LIBRARY:

It is a comprehensive, object-oriented collection of reusable types used to develop


applications ranging from traditional command-line or graphical user interface (GUI)
applications to applications based on the latest innovations provided by ASP.NET, such as Web
Forms and XML Web services.

The .NET Framework can be hosted by unmanaged components that load the common
language runtime into their processes and initiate the execution of managed code, thereby
creating a software environment that can exploit both managed and unmanaged features. The
.NET Framework not only provides several runtime hosts, but also supports the development of
third-party runtime hosts.

Internet Explorer is an example of an unmanaged application that hosts the runtime (in
the form of a MIME type extension). Using Internet Explorer to host the runtime to enables
embeds managed components or Windows Forms controls in HTML documents.

FEATURES OF THE COMMON LANGUAGE RUNTIME:

The common language runtime manages memory; thread execution, code execution, code
safety verification, compilation, and other system services these are all run on CLR.

 Security.
 Robustness.
 Productivity.
 Performance.

SECURITY:

The runtime enforces code access security. The security features of the runtime thus
enable legitimate Internet-deployed software to be exceptionally feature rich. With regards to
security, managed components are awarded varying degrees of trust, depending on a number of
factors that include their origin to perform file-access operations, registry-access operations, or
other sensitive functions.

ROBUSTNESS:

The runtime also enforces code robustness by implementing a strict type- and code-
verification infrastructure called the common type system (CTS). The CTS ensures that all
managed code is self-describing. The managed environment of the runtime eliminates many
common software issues.
PRODUCTIVITY:

The runtime also accelerates developer productivity. For example, programmers can
write applications in their development language of choice, yet take full advantage of the
runtime, the class library, and components written in other languages by other developers.

PERFORMANCE:

The runtime is designed to enhance performance. Although the common language


runtime provides many standard runtime services, managed code is never interpreted. A feature
called just-in-time (JIT) compiling enables all managed code to run in the native machine
language of the system on which it is executing. Finally, the runtime can be hosted by high-
performance, server-side applications, such as Microsoft® SQL Server™ and Internet
Information Services (IIS).

FEATURES OF ASP.NET

ASP.NET
ASP.NET is the next version of Active Server Pages (ASP); it is a unified Web
development platform that provides the services necessary for developers to build enterprise-
class Web applications. While ASP.NET is largely syntax compatible, it also provides a new
programming model and infrastructure for more secure, scalable, and stable applications.

ASP.NET is a compiled, NET-based environment, we can author applications in any .NET


compatible language, including Visual Basic .NET, C#, and JScript .NET. Additionally, the
entire .NET Framework is available to any ASP.NET application. Developers can easily access
the benefits of these technologies, which include the managed common language runtime
environment (CLR), type safety, inheritance, and so on.

ASP.NET has been designed to work seamlessly with WYSIWYG HTML editors and
other programming tools, including Microsoft Visual Studio .NET. Not only does this make Web
development easier, but it also provides all the benefits that these tools have to offer, including a
GUI that developers can use to drop server controls onto a Web page and fully integrated
debugging support. Developers can choose from the following two features when creating an
ASP.NET application. Web Forms and Web services, or combine these in any way they see fit.
Each is supported by the same infrastructure that allows you to use authentication schemes,
cache frequently used data, or customize your application's configuration, to name only a few
possibilities. Web Forms allows us to build powerful forms-based Web pages. When building
these pages, we can use ASP.NET server controls to create common UI elements, and program
them for common tasks. These controls allow we to rapidly build a Web Form out of reusable
built-in or custom components, simplifying the code of a page.

An XML Web service provides the means to access server functionality remotely. Using
Web services, businesses can expose programmatic interfaces to their data or business logic,
which in turn can be obtained and manipulated by client and server applications. XML Web
services enable the exchange of data in client-server or server-server scenarios, using standards
like HTTP and XML messaging to move data across firewalls. XML Web services are not tied to
a particular component technology or object-calling convention.

As a result, programs written in any language, using any component model, and running
on any operating system can access XML Web services

Each of these models can take full advantage of all ASP.NET features, as well as the
power of the .NET Framework and .NET Framework common language runtime. Accessing
databases from ASP.NET applications is an often-used technique for displaying data to Web site
visitors. ASP.NET makes it easier than ever to access databases for this purpose. It also allows
us to manage the database from your code .

ASP.NET provides a simple model that enables Web developers to write logic that runs
at the application level. Developers can write this code in the global.aspx text file or in a
compiled class deployed as an assembly. This logic can include application-level events, but
developers can easily extend this model to suit the needs of their Web application.

ASP.NET provides easy-to-use application and session-state facilities that are familiar to
ASP developers and are readily compatible with all other .NET Framework APIs.ASP.NET
offers the IHttpHandler and IHttpModule interfaces. Implementing the IHttpHandler interface
gives you a means of interacting with the low-level request and response services of the IIS Web
server and provides functionality much like ISAPI extensions, but with a simpler programming
model. Implementing the IHttpModule interface allows you to include custom events that
participate in every request made to your application.

ASP.NET takes advantage of performance enhancements found in the .NET Framework


and common language runtime. Additionally, it has been designed to offer significant
performance improvements over ASP and other Web development platforms. All ASP.NET code
is compiled, rather than interpreted, which allows early binding, strong typing, and just-in-time
(JIT) compilation to native code, to name only a few of its benefits. ASP.NET is also easily
factorable, meaning that developers can remove modules (a session module, for instance) that are
not relevant to the application they are developing.

ASP.NET provides extensive caching services (both built-in services and caching APIs).
ASP.NET also ships with performance counters that developers and system administrators can
monitor to test new applications and gather metrics on existing applications.

Writing custom debug statements to your Web page can help immensely in
troubleshooting your application's code. However, it can cause embarrassment if it is not
removed. The problem is that removing the debug statements from your pages when your
application is ready to be ported to a production server can require significant effort.

ASP.NET offers the Trace Context class, which allows us to write custom debug
statements to our pages as we develop them. They appear only when you have enabled tracing
for a page or entire application. Enabling tracing also appends details about a request to the page,
or, if you so specify, to a custom trace viewer that is stored in the root directory of your
application. The .NET Framework and ASP.NET provide default authorization and
authentication schemes for Web applications. we can easily remove, add to, or replace these
schemes, depending upon the needs of our application .

ASP.NET configuration settings are stored in XML-based files, which are human
readable and writable. Each of our applications can have a distinct configuration file and we can
extend the configuration scheme to suit our requirements.
DATA ACCESS WITH ADO.NET:

As you develop applications using ADO.NET, you will have different requirements for
working with data. You might never need to directly edit an XML file containing data - but it is
very useful to understand the data architecture in ADO.NET.

ADO.NET offers several advantages over previous versions of ADO:

 Interoperability
 Maintainability
 Programmability
 Performance Scalab

INTEROPERABILITY:

ADO.NET applications can take advantage of the flexibility and broad acceptance of
XML. Because XML is the format for transmitting datasets across the network, any component
that can read the XML format can process data. The receiving component need not be an
ADO.NET component.

The transmitting component can simply transmit the dataset to its destination without
regard to how the receiving component is implemented. The destination component might be a
Visual Studio application or any other application implemented with any tool whatsoever.

The only requirement is that the receiving component be able to read XML. SO, XML was
designed with exactly this kind of interoperability in mind.

MAINTAINABILITY:

In the life of a deployed system, modest changes are possible, but substantial,
Architectural changes are rarely attempted because they are so difficult. As the performance load
on a deployed application server grows, system resources can become scarce and response time
or throughput can suffer. Faced with this problem, software architects can choose to divide the
server's business-logic processing and user-interface processing onto separate tiers on separate
machines. In effect, the application server tier is replaced with two tiers, alleviating the shortage
of system resources. If the original application is implemented in ADO.NET using datasets, this
transformation is made easier.

ADO.NET data components in Visual Studio encapsulate data access functionality in


various ways that help you program more quickly and with fewer mistakes.

PERFORMANCE:

ADO.NET datasets offer performance advantages over ADO disconnected record sets. In
ADO.NET data-type conversion is not necessary.

SCALABILITY:

ADO.NET accommodates scalability by encouraging programmers to conserve limited


resources. Any ADO.NET application employs disconnected access to data; it does not retain
database locks or active database connections for long durations.

VISUAL STUDIO .NET:

Visual Studio .NET is a complete set of development tools for building ASP Web
applications, XML Web services, desktop applications, and mobile applications In addition to
building high-performing desktop applications, you can use Visual Studio's powerful
component-based development tools and other technologies to simplify team-based design,
development, and deployment of Enterprise solutions. Visual Basic .NET, Visual C++ .NET, and
Visual C# .NET all use the same integrated development environment (IDE), which allows them
to share tools and facilitates in the creation of mixed-language solutions.

In addition, these languages leverage the functionality of the .NET Framework and
simplify the development of ASP Web applications and XML Web services.

Visual Studio supports the .NET Framework, which provides a common language
runtime and unified programming classes; ASP.NET uses these components to create ASP Web
applications and XML Web services. Also it includes MSDN Library, which contains all the
documentation for these development tools.

MS-SQL SERVER 2005:

FEATURES OF SQL-SERVER 2005

The OLAP Services feature available in SQL Server version 7.0 is now called SQL
Server 2005 Analysis Services. The term OLAP Services has been replaced with the term
Analysis Services. Analysis Services also includes a new data mining component. The
Repository component available in SQL Server version 7.0 is now called Microsoft SQL Server
2005 Meta Data Services. References to the component now use the term Meta Data Services.
The term repository is used only in reference to the repository engine within Meta Data Services
SQL-SERVER database consist of six type of objects,

They are,

 TABLE
 QUERY
 FORM
 REPORT
 MACRO

TABLE:

A database is a collection of data about a specific topic.

VIEWS OF TABLE:

We can work with a table in two types,

 Design View
 Datasheet View
Design View

To build or modify the structure of a table we work in the table design view. We can
specify what kind of data will be hold.

Datasheet View

To add, edit or analyses the data itself we work in tables datasheet view mode.

QUERY:

A query is a question that has to be asked the data. Access gathers data that answers the
question from one or more table. The data that make up the answer is either dynaset (if you edit
it) or a snapshot(it cannot be edited).Each time we run query, we get latest information in the
dynaset.Access either displays the dynaset or snapshot for us to view or perform an action on it
,such as deleting or updating.

FORMS:

A form is used to view and edit information in the database record by record .A form
displays only the information we want to see in the way we want to see it. Forms use the familiar
controls such as textboxes and checkboxes. This makes viewing and entering data easy.

Views of Form:
We can work with forms in several primarily there are two views:
 Design View
 Form View

Design View:

To build or modify the structure of a form, we work in forms design view. We can add
control to the form that are bound to fields in a table or query, includes textboxes, option buttons,
graphs and pictures.

Form View:
The form view which display the whole design of the form.

REPORT:

A report is used to vies and print information from the database. The report can ground
records into many levels and compute totals and average by checking values from many records
at once. Also the report is attractive and distinctive because we have control over the size and
appearance of it.

MACRO:
A macro is a set of actions. Each action in macros does something. Such as opening a form or
printing a report .We write macros to automate the common tasks the work easy and save the
time.
MODULE:
Modules are units of code written in access basic language. We can write and use module to
automate and customize the database in very sophisticated ways. It is a personal computer based
RDBMS. This provides most of the features available in the high-end RDBMS products like
Oracle, Sybase, and Ingress etc. VB keeps access as its native database. Developer can create a
database for development & further can create. The tables are required to store data. During the
initial Development phase data can be stored in the access database & during the implementation
phase depending on the volume data can use a higher – end database.
SYSTEM STUDY:

FEASIBILTY STUDY:

The feasibility of the project is analyzed in this phase and business proposal is put forth
with a very general plan for the project and some cost estimates. During system analysis the
feasibility study of the proposed system is to be carried out. This is to ensure that the proposed
system is not a burden to the company. For feasibility analysis, some understanding of the major
requirements for the system is essential.
Three key considerations involved in the feasibility analysis are

 ECONOMICAL FEASIBILITY
 TECHNICAL FEASIBILITY
 SOCIAL FEASIBILITY

ECONOMICAL FEASIBILITY:

This study is carried out to check the economic impact that the system will have on the
organization. The amount of fund that the company can pour into the research and development
of the system is limited. The expenditures must be justified. Thus the developed system as well
within the budget and this was achieved because most of the technologies used are freely
available. Only the customized products had to be purchased.

TECHNICAL FEASIBILITY

This study is carried out to check the technical feasibility, that is, the technical
requirements of the system. Any system developed must not have a high demand on the available
technical resources. This will lead to high demands on the available technical resources. This
will lead to high demands being placed on the client. The developed system must have a modest
requirement, as only minimal or null changes are required for implementing this system.
SOCIAL FEASIBILITY:

The aspect of study is to check the level of acceptance of the system by the user. This
includes the process of training the user to use the system efficiently. The user must not feel
threatened by the system, instead must accept it as a necessity.
The level of acceptance by the users solely depends on the methods that are employed to
educate the user about the system and to make him familiar with it. His level of confidence must
be raised so that he is also able to make some constructive criticism, which is welcomed, as he is
the final user of the system.

SYSTEM TESTING AND MAINTENANCE:

Testing is vital to the success of the system. System testing makes a logical assumption
that if all parts of the system are correct, the goal will be successfully achieved. In the testing
process we test the actual system in an organization and gather errors from the new system
operates in full efficiency as stated. System testing is the stage of implementation, which is
aimed to ensuring that the system works accurately and efficiently.
In the testing process we test the actual system in an organization and gather errors from
the new system and take initiatives to correct the same. All the front-end and back-end
connectivity are tested to be sure that the new system operates in full efficiency as stated. System
testing is the stage of implementation, which is aimed at ensuring that the system works
accurately and efficiently.
The main objective of testing is to uncover errors from the system. For the uncovering
process we have to give proper input data to the system. So we should have more conscious to
give input data. It is important to give correct inputs to efficient testing.
Testing is done for each module. After testing all the modules, the modules are integrated
and testing of the final system is done with the test data, specially designed to show that the
system will operate successfully in all its aspects conditions. Thus the system testing is a
confirmation that all is correct and an opportunity to show the user that the system works.
Inadequate testing or non-testing leads to errors that may appear few months later.
This will create two problems, Time delay between the cause and appearance of the
problem. The effect of the system errors on files and records within the system. The purpose of
the system testing is to consider all the likely variations to which it will be suggested and push
the system to its limits.
The testing process focuses on logical intervals of the software ensuring that all the
statements have been tested and on the function intervals (i.e.,) conducting tests to uncover errors
and ensure that defined inputs will produce actual results that agree with the required results.
Testing has to be done using the two common steps Unit testing and Integration testing. In the
project system testing is made as follows:
The procedure level testing is made first. By giving improper inputs, the errors occurred
are noted and eliminated. This is the final step in system life cycle. Here we implement the tested
error-free system into real-life environment and make necessary changes, which runs in an online
fashion. Here system maintenance is done every months or year based on company policies, and
is checked for errors like runtime errors, long run errors and other maintenances like table
verification and reports.
UNIT TESTING:

Unit testing verification efforts on the smallest unit of software design, module. This is
known as “Module Testing”. The modules are tested separately. This testing is carried out during
programming stage itself. In these testing steps, each module is found to be working
satisfactorily as regard to the expected output from the module.
INTEGRATION TESTING:

Integration testing is a systematic technique for constructing tests to uncover error


associated within the interface. In the project, all the modules are combined and then the entire
programmer is tested as a whole. In the integration-testing step, all the error uncovered is
corrected for the next testing steps.
Sample Coding:

Login Coding:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace SteganoDemo
{
public partial class Login : Form
{
SqlConnection con = new SqlConnection("server=FABSYS1-PC;initial catalog=hide;
Persist security info=true;user id= sa; password=saadmin;");
SqlCommand cmd;
SqlDataReader dr;
public Login()
{
InitializeComponent();
}

private void btn_ok_Click(object sender, EventArgs e)


{
if (txt_pass.Text == "")
MessageBox.Show("Enter the Fields");
else
{

con.Open();
cmd = new SqlCommand("select * from login where Name='" + txt_user.Text +
"' and password='" + txt_pass.Text + "'", con);
dr = cmd.ExecuteReader();
if (dr.Read())
{

txt_user.Text = "";
txt_pass.Text = "";
MessageBox.Show("Welcome User");
MainForm main = new MainForm();
main.Show();
this.Visible = false;

}
else
{
MessageBox.Show("Enter correct username & password");
txt_user.Text = "";
txt_pass.Text = "";
txt_user.Focus();
}
con.Close();
}
}

private void btn_ext_Click(object sender, EventArgs e)


{
Application.Exit();
}

private void exitToolStripMenuItem_Click(object sender, EventArgs e)


{
Application.Exit();
}

private void newUserToolStripMenuItem1_Click(object sender, EventArgs e)


{
Reg r = new Reg();
this.Hide();
r.Show();
}

private void button1_Click(object sender, EventArgs e)


{
Reg r = new Reg();
this.Hide();
r.Show();
}

private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs


e)
{

private void lbl_Title_Click(object sender, EventArgs e)


{

private void groupBox1_Enter(object sender, EventArgs e)


{

private void label3_Click(object sender, EventArgs e)


{

private void txt_pass_TextChanged(object sender, EventArgs e)


{

private void txt_user_TextChanged(object sender, EventArgs e)


{

private void label2_Click(object sender, EventArgs e)


{

private void label1_Click(object sender, EventArgs e)


{

private void Login_Load(object sender, EventArgs e)


{

}
}
}

Main Form:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Net;
using System.Collections.Generic;

namespace SteganoDemo
{
public class MainForm : System.Windows.Forms.Form
{
private System.Windows.Forms.Panel panelKeyFiles;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Splitter splitter1;
private System.Windows.Forms.ColumnHeader clmKeyFileName;
private System.Windows.Forms.ListView lvKeyFiles;
private System.Windows.Forms.Button btnKeyFileAdd;
private System.Windows.Forms.Button btnKeyFileRemove;
private OpenFileDialog openFileDialog1;
private TabPage tabExtract;
private Button btnExtract;
private TextBox txtExtractMsgText;
private TextBox txtExtractMsgFile;
private Button btnExtractMsgFileBrowse;
private RadioButton rdoExtractMsgText;
private RadioButton rdoExtractMsgFile;
private Label label4;
private Panel panel1;
private ListView lvExtractCarriers;
private ColumnHeader clmExtractFileName;
private ColumnHeader clmExtractCarrierUnits;
private Button btnExtractAddCarrierFile;
private Button btnExtractRemoveCarrierFile;
private Label label2;
private TabPage tabHide;
private Panel panelHide;
private Button btnHide;
private TextBox txtHideMsgText;
private Button btnHideMsgFileBrowse;
private TextBox txtHideMsgFile;
private RadioButton rdoHideMsgText;
private RadioButton rdoHideMsgFile;
private Label label3;
private Panel panelHideCarriers;
private Button btnHideEditCarrierFile;
private ListView lvHideCarriers;
private ColumnHeader clmFileName;
private ColumnHeader clmSaveAs;
private ColumnHeader clmCarrierUnits;
private ColumnHeader clmUseableCarrierUnits;
private ColumnHeader clmCreateNoise;
private Button btnHideAddCarrierFile;
private Button btnHideRemoveCarrierFile;
private CountOfUnitsDisplayControl displayCountOfUnitsHide;
private TabControl tabctlTasks;
private Button btnEncrypt;
private Button button4;
private System.ComponentModel.Container components = null;

public MainForm()
{
InitializeComponent();

protected override void Dispose(bool disposing)


{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}

#region Vom Windows Form-Designer generierter Code


/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new
System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.panelKeyFiles = new System.Windows.Forms.Panel();
this.btnKeyFileAdd = new System.Windows.Forms.Button();
this.btnKeyFileRemove = new System.Windows.Forms.Button();
this.lvKeyFiles = new System.Windows.Forms.ListView();
this.clmKeyFileName = ((System.Windows.Forms.ColumnHeader)(new
System.Windows.Forms.ColumnHeader()));
this.label1 = new System.Windows.Forms.Label();
this.splitter1 = new System.Windows.Forms.Splitter();
this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
this.tabExtract = new System.Windows.Forms.TabPage();
this.button4 = new System.Windows.Forms.Button();
this.btnExtract = new System.Windows.Forms.Button();
this.txtExtractMsgText = new System.Windows.Forms.TextBox();
this.txtExtractMsgFile = new System.Windows.Forms.TextBox();
this.btnExtractMsgFileBrowse = new System.Windows.Forms.Button();
this.rdoExtractMsgText = new System.Windows.Forms.RadioButton();
this.rdoExtractMsgFile = new System.Windows.Forms.RadioButton();
this.label4 = new System.Windows.Forms.Label();
this.panel1 = new System.Windows.Forms.Panel();
this.lvExtractCarriers = new System.Windows.Forms.ListView();
this.clmExtractFileName = ((System.Windows.Forms.ColumnHeader)(new
System.Windows.Forms.ColumnHeader()));
this.clmExtractCarrierUnits = ((System.Windows.Forms.ColumnHeader)(new
System.Windows.Forms.ColumnHeader()));
this.btnExtractAddCarrierFile = new System.Windows.Forms.Button();
this.btnExtractRemoveCarrierFile = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.tabHide = new System.Windows.Forms.TabPage();
this.panelHide = new System.Windows.Forms.Panel();
this.btnEncrypt = new System.Windows.Forms.Button();
this.btnHide = new System.Windows.Forms.Button();
this.txtHideMsgText = new System.Windows.Forms.TextBox();
this.btnHideMsgFileBrowse = new System.Windows.Forms.Button();
this.txtHideMsgFile = new System.Windows.Forms.TextBox();
this.rdoHideMsgText = new System.Windows.Forms.RadioButton();
this.rdoHideMsgFile = new System.Windows.Forms.RadioButton();
this.label3 = new System.Windows.Forms.Label();
this.panelHideCarriers = new System.Windows.Forms.Panel();
this.btnHideEditCarrierFile = new System.Windows.Forms.Button();
this.lvHideCarriers = new System.Windows.Forms.ListView();
this.clmFileName = ((System.Windows.Forms.ColumnHeader)(new
System.Windows.Forms.ColumnHeader()));
this.clmSaveAs = ((System.Windows.Forms.ColumnHeader)(new
System.Windows.Forms.ColumnHeader()));
this.clmCarrierUnits = ((System.Windows.Forms.ColumnHeader)(new
System.Windows.Forms.ColumnHeader()));
this.clmUseableCarrierUnits = ((System.Windows.Forms.ColumnHeader)(new
System.Windows.Forms.ColumnHeader()));
this.clmCreateNoise = ((System.Windows.Forms.ColumnHeader)(new
System.Windows.Forms.ColumnHeader()));
this.btnHideAddCarrierFile = new System.Windows.Forms.Button();
this.btnHideRemoveCarrierFile = new System.Windows.Forms.Button();
this.displayCountOfUnitsHide = new SteganoDemo.CountOfUnitsDisplayControl();
this.tabctlTasks = new System.Windows.Forms.TabControl();
this.panelKeyFiles.SuspendLayout();
this.tabExtract.SuspendLayout();
this.panel1.SuspendLayout();
this.tabHide.SuspendLayout();
this.panelHide.SuspendLayout();
this.panelHideCarriers.SuspendLayout();
this.tabctlTasks.SuspendLayout();
this.SuspendLayout();
//
// panelKeyFiles
//
this.panelKeyFiles.Controls.Add(this.btnKeyFileAdd);
this.panelKeyFiles.Controls.Add(this.btnKeyFileRemove);
this.panelKeyFiles.Controls.Add(this.lvKeyFiles);
this.panelKeyFiles.Controls.Add(this.label1);
this.panelKeyFiles.Dock = System.Windows.Forms.DockStyle.Top;
this.panelKeyFiles.Location = new System.Drawing.Point(12, 12);
this.panelKeyFiles.Name = "panelKeyFiles";
this.panelKeyFiles.Size = new System.Drawing.Size(768, 101);
this.panelKeyFiles.TabIndex = 1;
//
// btnKeyFileAdd
//
this.btnKeyFileAdd.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Right)));
this.btnKeyFileAdd.Image =
((System.Drawing.Image)(resources.GetObject("btnKeyFileAdd.Image")));
this.btnKeyFileAdd.Location = new System.Drawing.Point(721, 26);
this.btnKeyFileAdd.Name = "btnKeyFileAdd";
this.btnKeyFileAdd.Size = new System.Drawing.Size(34, 34);
this.btnKeyFileAdd.TabIndex = 2;
this.btnKeyFileAdd.Click += new System.EventHandler(this.btnKeyFileAdd_Click);
//
// btnKeyFileRemove
//
this.btnKeyFileRemove.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Right)));
this.btnKeyFileRemove.Enabled = false;
this.btnKeyFileRemove.Image =
((System.Drawing.Image)(resources.GetObject("btnKeyFileRemove.Image")));
this.btnKeyFileRemove.Location = new System.Drawing.Point(721, 62);
this.btnKeyFileRemove.Name = "btnKeyFileRemove";
this.btnKeyFileRemove.Size = new System.Drawing.Size(34, 34);
this.btnKeyFileRemove.TabIndex = 3;
this.btnKeyFileRemove.Click += new System.EventHandler(this.btnKeyFileRemove_Click);
//
// lvKeyFiles
//
this.lvKeyFiles.Anchor =
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lvKeyFiles.CausesValidation = false;
this.lvKeyFiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.clmKeyFileName});
this.lvKeyFiles.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
this.lvKeyFiles.Location = new System.Drawing.Point(0, 24);
this.lvKeyFiles.Name = "lvKeyFiles";
this.lvKeyFiles.Size = new System.Drawing.Size(720, 73);
this.lvKeyFiles.TabIndex = 0;
this.lvKeyFiles.UseCompatibleStateImageBehavior = false;
this.lvKeyFiles.View = System.Windows.Forms.View.Details;
this.lvKeyFiles.SelectedIndexChanged += new
System.EventHandler(this.lvKeyFiles_SelectedIndexChanged);
//
// clmKeyFileName
//
this.clmKeyFileName.Text = "File Name";
this.clmKeyFileName.Width = 700;
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Top;
this.label1.Location = new System.Drawing.Point(0, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(768, 24);
this.label1.TabIndex = 1;
this.label1.Text = "Key Files";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// splitter1
//
this.splitter1.Dock = System.Windows.Forms.DockStyle.Top;
this.splitter1.Location = new System.Drawing.Point(12, 113);
this.splitter1.Name = "splitter1";
this.splitter1.Size = new System.Drawing.Size(768, 13);
this.splitter1.TabIndex = 3;
this.splitter1.TabStop = false;
//
// openFileDialog1
//
this.openFileDialog1.FileName = "openFileDialog1";
//
// tabExtract
//
this.tabExtract.Controls.Add(this.button4);
this.tabExtract.Controls.Add(this.btnExtract);
this.tabExtract.Controls.Add(this.txtExtractMsgText);
this.tabExtract.Controls.Add(this.txtExtractMsgFile);
this.tabExtract.Controls.Add(this.btnExtractMsgFileBrowse);
this.tabExtract.Controls.Add(this.rdoExtractMsgText);
this.tabExtract.Controls.Add(this.rdoExtractMsgFile);
this.tabExtract.Controls.Add(this.label4);
this.tabExtract.Controls.Add(this.panel1);
this.tabExtract.Controls.Add(this.label2);
this.tabExtract.Location = new System.Drawing.Point(4, 22);
this.tabExtract.Name = "tabExtract";
this.tabExtract.Padding = new System.Windows.Forms.Padding(12, 12, 0, 0);
this.tabExtract.Size = new System.Drawing.Size(760, 403);
this.tabExtract.TabIndex = 1;
this.tabExtract.Text = "Extract";
this.tabExtract.UseVisualStyleBackColor = true;
//
// button4
//
this.button4.Location = new System.Drawing.Point(486, 338);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(81, 23);
this.button4.TabIndex = 21;
this.button4.Text = "Decrypt";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// btnExtract
//
this.btnExtract.Image =
((System.Drawing.Image)(resources.GetObject("btnExtract.Image")));
this.btnExtract.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnExtract.Location = new System.Drawing.Point(326, 337);
this.btnExtract.Name = "btnExtract";
this.btnExtract.Size = new System.Drawing.Size(128, 25);
this.btnExtract.TabIndex = 19;
this.btnExtract.Text = "Extract Message";
this.btnExtract.Click += new System.EventHandler(this.btnExtract_Click);
//
// txtExtractMsgText
//
this.txtExtractMsgText.Anchor =
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtExtractMsgText.Location = new System.Drawing.Point(85, 201);
this.txtExtractMsgText.Multiline = true;
this.txtExtractMsgText.Name = "txtExtractMsgText";
this.txtExtractMsgText.ReadOnly = true;
this.txtExtractMsgText.Size = new System.Drawing.Size(670, 96);
this.txtExtractMsgText.TabIndex = 18;
this.txtExtractMsgText.TextChanged += new
System.EventHandler(this.txtExtractMsgText_TextChanged);
//
// txtExtractMsgFile
//
this.txtExtractMsgFile.Anchor =
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtExtractMsgFile.Location = new System.Drawing.Point(85, 173);
this.txtExtractMsgFile.Name = "txtExtractMsgFile";
this.txtExtractMsgFile.Size = new System.Drawing.Size(585, 20);
this.txtExtractMsgFile.TabIndex = 16;
this.txtExtractMsgFile.TextChanged += new
System.EventHandler(this.txtExtractMsgFile_TextChanged);
//
// btnExtractMsgFileBrowse
//
this.btnExtractMsgFileBrowse.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Right)));
this.btnExtractMsgFileBrowse.Location = new System.Drawing.Point(670, 173);
this.btnExtractMsgFileBrowse.Name = "btnExtractMsgFileBrowse";
this.btnExtractMsgFileBrowse.Size = new System.Drawing.Size(85, 22);
this.btnExtractMsgFileBrowse.TabIndex = 17;
this.btnExtractMsgFileBrowse.Text = "Browse...";
this.btnExtractMsgFileBrowse.Click += new
System.EventHandler(this.btnExtractMsgFileBrowse_Click);
//
// rdoExtractMsgText
//
this.rdoExtractMsgText.Checked = true;
this.rdoExtractMsgText.Location = new System.Drawing.Point(17, 194);
this.rdoExtractMsgText.Name = "rdoExtractMsgText";
this.rdoExtractMsgText.Size = new System.Drawing.Size(68, 25);
this.rdoExtractMsgText.TabIndex = 15;
this.rdoExtractMsgText.TabStop = true;
this.rdoExtractMsgText.Text = "Display";
this.rdoExtractMsgText.CheckedChanged += new
System.EventHandler(this.rdoExtractMsg_CheckedChanged);
//
// rdoExtractMsgFile
//
this.rdoExtractMsgFile.Location = new System.Drawing.Point(17, 166);
this.rdoExtractMsgFile.Name = "rdoExtractMsgFile";
this.rdoExtractMsgFile.Size = new System.Drawing.Size(68, 26);
this.rdoExtractMsgFile.TabIndex = 14;
this.rdoExtractMsgFile.Text = "Save as";
this.rdoExtractMsgFile.CheckedChanged += new
System.EventHandler(this.rdoExtractMsg_CheckedChanged);
//
// label4
//
this.label4.Dock = System.Windows.Forms.DockStyle.Top;
this.label4.Location = new System.Drawing.Point(12, 142);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(748, 25);
this.label4.TabIndex = 13;
this.label4.Text = "Message";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// panel1
//
this.panel1.Controls.Add(this.lvExtractCarriers);
this.panel1.Controls.Add(this.btnExtractAddCarrierFile);
this.panel1.Controls.Add(this.btnExtractRemoveCarrierFile);
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.Location = new System.Drawing.Point(12, 37);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(748, 105);
this.panel1.TabIndex = 12;
//
// lvExtractCarriers
//
this.lvExtractCarriers.Anchor =
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lvExtractCarriers.CausesValidation = false;
this.lvExtractCarriers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.clmExtractFileName,
this.clmExtractCarrierUnits});
this.lvExtractCarriers.FullRowSelect = true;
this.lvExtractCarriers.Location = new System.Drawing.Point(0, 0);
this.lvExtractCarriers.MultiSelect = false;
this.lvExtractCarriers.Name = "lvExtractCarriers";
this.lvExtractCarriers.Size = new System.Drawing.Size(700, 104);
this.lvExtractCarriers.TabIndex = 0;
this.lvExtractCarriers.UseCompatibleStateImageBehavior = false;
this.lvExtractCarriers.View = System.Windows.Forms.View.Details;
//
// clmExtractFileName
//
this.clmExtractFileName.Text = "Original Name";
this.clmExtractFileName.Width = 550;
//
// clmExtractCarrierUnits
//
this.clmExtractCarrierUnits.Text = "Carrier Units";
this.clmExtractCarrierUnits.Width = 120;
//
// btnExtractAddCarrierFile
//
this.btnExtractAddCarrierFile.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Right)));
this.btnExtractAddCarrierFile.Image =
((System.Drawing.Image)(resources.GetObject("btnExtractAddCarrierFile.Image")));
this.btnExtractAddCarrierFile.Location = new System.Drawing.Point(705, 14);
this.btnExtractAddCarrierFile.Name = "btnExtractAddCarrierFile";
this.btnExtractAddCarrierFile.Size = new System.Drawing.Size(34, 34);
this.btnExtractAddCarrierFile.TabIndex = 2;
this.btnExtractAddCarrierFile.Click += new
System.EventHandler(this.btnExtractAddCarrierFile_Click);
//
// btnExtractRemoveCarrierFile
//
this.btnExtractRemoveCarrierFile.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Right)));
this.btnExtractRemoveCarrierFile.Image =
((System.Drawing.Image)(resources.GetObject("btnExtractRemoveCarrierFile.Image")));
this.btnExtractRemoveCarrierFile.Location = new System.Drawing.Point(705, 62);
this.btnExtractRemoveCarrierFile.Name = "btnExtractRemoveCarrierFile";
this.btnExtractRemoveCarrierFile.Size = new System.Drawing.Size(34, 35);
this.btnExtractRemoveCarrierFile.TabIndex = 3;
this.btnExtractRemoveCarrierFile.Click += new
System.EventHandler(this.btnExtractRemoveCarrierFile_Click);
//
// label2
//
this.label2.Dock = System.Windows.Forms.DockStyle.Top;
this.label2.Location = new System.Drawing.Point(12, 12);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(748, 25);
this.label2.TabIndex = 20;
this.label2.Text = "Carrier Files";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// tabHide
//
this.tabHide.Controls.Add(this.panelHide);
this.tabHide.Location = new System.Drawing.Point(4, 22);
this.tabHide.Name = "tabHide";
this.tabHide.Padding = new System.Windows.Forms.Padding(12, 12, 0, 0);
this.tabHide.Size = new System.Drawing.Size(760, 403);
this.tabHide.TabIndex = 0;
this.tabHide.Text = "Hide";
this.tabHide.UseVisualStyleBackColor = true;
//
// panelHide
//
this.panelHide.Controls.Add(this.btnEncrypt);
this.panelHide.Controls.Add(this.btnHide);
this.panelHide.Controls.Add(this.txtHideMsgText);
this.panelHide.Controls.Add(this.btnHideMsgFileBrowse);
this.panelHide.Controls.Add(this.txtHideMsgFile);
this.panelHide.Controls.Add(this.rdoHideMsgText);
this.panelHide.Controls.Add(this.rdoHideMsgFile);
this.panelHide.Controls.Add(this.label3);
this.panelHide.Controls.Add(this.panelHideCarriers);
this.panelHide.Controls.Add(this.displayCountOfUnitsHide);
this.panelHide.Dock = System.Windows.Forms.DockStyle.Fill;
this.panelHide.Location = new System.Drawing.Point(12, 12);
this.panelHide.Name = "panelHide";
this.panelHide.Size = new System.Drawing.Size(748, 391);
this.panelHide.TabIndex = 12;
//
// btnEncrypt
//
this.btnEncrypt.Location = new System.Drawing.Point(483, 343);
this.btnEncrypt.Name = "btnEncrypt";
this.btnEncrypt.Size = new System.Drawing.Size(75, 23);
this.btnEncrypt.TabIndex = 14;
this.btnEncrypt.Text = "Encrypt";
this.btnEncrypt.UseVisualStyleBackColor = true;
this.btnEncrypt.Click += new System.EventHandler(this.btnEncrypt_Click);
//
// btnHide
//
this.btnHide.Enabled = false;
this.btnHide.Image = ((System.Drawing.Image)(resources.GetObject("btnHide.Image")));
this.btnHide.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.btnHide.Location = new System.Drawing.Point(594, 343);
this.btnHide.Name = "btnHide";
this.btnHide.Size = new System.Drawing.Size(127, 25);
this.btnHide.TabIndex = 11;
this.btnHide.Text = "Hide Message";
this.btnHide.Click += new System.EventHandler(this.btnHide_Click);
//
// txtHideMsgText
//
this.txtHideMsgText.Anchor =
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtHideMsgText.Location = new System.Drawing.Point(74, 207);
this.txtHideMsgText.Multiline = true;
this.txtHideMsgText.Name = "txtHideMsgText";
this.txtHideMsgText.ScrollBars = System.Windows.Forms.ScrollBars.Both;
this.txtHideMsgText.Size = new System.Drawing.Size(665, 103);
this.txtHideMsgText.TabIndex = 10;
this.txtHideMsgText.TextChanged += new
System.EventHandler(this.txtHideMsgText_TextChanged);
//
// btnHideMsgFileBrowse
//
this.btnHideMsgFileBrowse.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Right)));
this.btnHideMsgFileBrowse.Location = new System.Drawing.Point(652, 166);
this.btnHideMsgFileBrowse.Name = "btnHideMsgFileBrowse";
this.btnHideMsgFileBrowse.Size = new System.Drawing.Size(86, 22);
this.btnHideMsgFileBrowse.TabIndex = 9;
this.btnHideMsgFileBrowse.Text = "Browse...";
this.btnHideMsgFileBrowse.Click += new
System.EventHandler(this.btnHideMsgFileBrowse_Click);
//
// txtHideMsgFile
//
this.txtHideMsgFile.Anchor =
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtHideMsgFile.Location = new System.Drawing.Point(73, 166);
this.txtHideMsgFile.Name = "txtHideMsgFile";
this.txtHideMsgFile.Size = new System.Drawing.Size(579, 20);
this.txtHideMsgFile.TabIndex = 8;
this.txtHideMsgFile.TextChanged += new
System.EventHandler(this.txtHideMsgFile_TextChanged);
//
// rdoHideMsgText
//
this.rdoHideMsgText.Checked = true;
this.rdoHideMsgText.Location = new System.Drawing.Point(8, 219);
this.rdoHideMsgText.Name = "rdoHideMsgText";
this.rdoHideMsgText.Size = new System.Drawing.Size(65, 26);
this.rdoHideMsgText.TabIndex = 7;
this.rdoHideMsgText.TabStop = true;
this.rdoHideMsgText.Text = "Text";
this.rdoHideMsgText.CheckedChanged += new
System.EventHandler(this.rdoHideMsg_CheckedChanged);
//
// rdoHideMsgFile
//
this.rdoHideMsgFile.Location = new System.Drawing.Point(8, 159);
this.rdoHideMsgFile.Name = "rdoHideMsgFile";
this.rdoHideMsgFile.Size = new System.Drawing.Size(65, 26);
this.rdoHideMsgFile.TabIndex = 6;
this.rdoHideMsgFile.Text = "File";
this.rdoHideMsgFile.CheckedChanged += new
System.EventHandler(this.rdoHideMsg_CheckedChanged);
//
// label3
//
this.label3.Dock = System.Windows.Forms.DockStyle.Top;
this.label3.Location = new System.Drawing.Point(0, 134);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(748, 25);
this.label3.TabIndex = 5;
this.label3.Text = "Message";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// panelHideCarriers
//
this.panelHideCarriers.Controls.Add(this.btnHideEditCarrierFile);
this.panelHideCarriers.Controls.Add(this.lvHideCarriers);
this.panelHideCarriers.Controls.Add(this.btnHideAddCarrierFile);
this.panelHideCarriers.Controls.Add(this.btnHideRemoveCarrierFile);
this.panelHideCarriers.Dock = System.Windows.Forms.DockStyle.Top;
this.panelHideCarriers.Location = new System.Drawing.Point(0, 28);
this.panelHideCarriers.Name = "panelHideCarriers";
this.panelHideCarriers.Size = new System.Drawing.Size(748, 106);
this.panelHideCarriers.TabIndex = 4;
//
// btnHideEditCarrierFile
//
this.btnHideEditCarrierFile.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Right)));
this.btnHideEditCarrierFile.Enabled = false;
this.btnHideEditCarrierFile.Image =
((System.Drawing.Image)(resources.GetObject("btnHideEditCarrierFile.Image")));
this.btnHideEditCarrierFile.Location = new System.Drawing.Point(707, 69);
this.btnHideEditCarrierFile.Name = "btnHideEditCarrierFile";
this.btnHideEditCarrierFile.Size = new System.Drawing.Size(34, 34);
this.btnHideEditCarrierFile.TabIndex = 4;
this.btnHideEditCarrierFile.Click += new
System.EventHandler(this.btnHideEditCarrierFile_Click);
//
// lvHideCarriers
//
this.lvHideCarriers.Anchor =
((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lvHideCarriers.CausesValidation = false;
this.lvHideCarriers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.clmFileName,
this.clmSaveAs,
this.clmCarrierUnits,
this.clmUseableCarrierUnits,
this.clmCreateNoise});
this.lvHideCarriers.FullRowSelect = true;
this.lvHideCarriers.Location = new System.Drawing.Point(0, 0);
this.lvHideCarriers.MultiSelect = false;
this.lvHideCarriers.Name = "lvHideCarriers";
this.lvHideCarriers.Size = new System.Drawing.Size(705, 104);
this.lvHideCarriers.TabIndex = 0;
this.lvHideCarriers.UseCompatibleStateImageBehavior = false;
this.lvHideCarriers.View = System.Windows.Forms.View.Details;
this.lvHideCarriers.SelectedIndexChanged += new
System.EventHandler(this.lvHideCarriers_SelectedIndexChanged);
//
// clmFileName
//
this.clmFileName.Text = "Original Name";
this.clmFileName.Width = 170;
//
// clmSaveAs
//
this.clmSaveAs.Text = "New Name";
this.clmSaveAs.Width = 170;
//
// clmCarrierUnits
//
this.clmCarrierUnits.Text = "Carrier Units";
this.clmCarrierUnits.Width = 100;
//
// clmUseableCarrierUnits
//
this.clmUseableCarrierUnits.Text = "Useable Carrier Units";
this.clmUseableCarrierUnits.Width = 150;
//
// clmCreateNoise
//
this.clmCreateNoise.Text = "Add Noise";
this.clmCreateNoise.Width = 80;
//
// btnHideAddCarrierFile
//
this.btnHideAddCarrierFile.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Right)));
this.btnHideAddCarrierFile.Image =
((System.Drawing.Image)(resources.GetObject("btnHideAddCarrierFile.Image")));
this.btnHideAddCarrierFile.Location = new System.Drawing.Point(707, 0);
this.btnHideAddCarrierFile.Name = "btnHideAddCarrierFile";
this.btnHideAddCarrierFile.Size = new System.Drawing.Size(34, 34);
this.btnHideAddCarrierFile.TabIndex = 2;
this.btnHideAddCarrierFile.Click += new
System.EventHandler(this.btnHideAddCarrierFile_Click);
//
// btnHideRemoveCarrierFile
//
this.btnHideRemoveCarrierFile.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top |
System.Windows.Forms.AnchorStyles.Right)));
this.btnHideRemoveCarrierFile.Enabled = false;
this.btnHideRemoveCarrierFile.Image =
((System.Drawing.Image)(resources.GetObject("btnHideRemoveCarrierFile.Image")));
this.btnHideRemoveCarrierFile.Location = new System.Drawing.Point(707, 35);
this.btnHideRemoveCarrierFile.Name = "btnHideRemoveCarrierFile";
this.btnHideRemoveCarrierFile.Size = new System.Drawing.Size(34, 34);
this.btnHideRemoveCarrierFile.TabIndex = 3;
this.btnHideRemoveCarrierFile.Click += new
System.EventHandler(this.btnHideRemoveCarrierFile_Click);
//
// displayCountOfUnitsHide
//
this.displayCountOfUnitsHide.CountAvailableCarrierUnits = ((long)(0));
this.displayCountOfUnitsHide.CountRequiredCarrierUnits = ((long)(0));
this.displayCountOfUnitsHide.CountRequiredVisible = true;
this.displayCountOfUnitsHide.Dock = System.Windows.Forms.DockStyle.Top;
this.displayCountOfUnitsHide.Location = new System.Drawing.Point(0, 0);
this.displayCountOfUnitsHide.Name = "displayCountOfUnitsHide";
this.displayCountOfUnitsHide.Size = new System.Drawing.Size(748, 28);
this.displayCountOfUnitsHide.TabIndex = 12;
this.displayCountOfUnitsHide.ValueChanged += new
System.EventHandler(this.displayCountOfUnitsHide_ValueChanged);
//
// tabctlTasks
//
this.tabctlTasks.Controls.Add(this.tabHide);
this.tabctlTasks.Controls.Add(this.tabExtract);
this.tabctlTasks.Dock = System.Windows.Forms.DockStyle.Fill;
this.tabctlTasks.Location = new System.Drawing.Point(12, 126);
this.tabctlTasks.Name = "tabctlTasks";
this.tabctlTasks.SelectedIndex = 0;
this.tabctlTasks.Size = new System.Drawing.Size(768, 429);
this.tabctlTasks.TabIndex = 0;
//
// MainForm
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.CausesValidation = false;
this.ClientSize = new System.Drawing.Size(792, 567);
this.Controls.Add(this.tabctlTasks);
this.Controls.Add(this.splitter1);
this.Controls.Add(this.panelKeyFiles);
this.Name = "MainForm";
this.Padding = new System.Windows.Forms.Padding(12);
this.Text = "Data Hiding for uncompressed Carriers";
this.Load += new System.EventHandler(this.MainForm_Load);
this.panelKeyFiles.ResumeLayout(false);
this.tabExtract.ResumeLayout(false);
this.tabExtract.PerformLayout();
this.panel1.ResumeLayout(false);
this.tabHide.ResumeLayout(false);
this.panelHide.ResumeLayout(false);
this.panelHide.PerformLayout();
this.panelHideCarriers.ResumeLayout(false);
this.tabctlTasks.ResumeLayout(false);
this.ResumeLayout(false);

}
#endregion

[STAThread]
static void Main()
{
Application.Run(new Login());
}

private String[] ChooseFileName(bool allowMultiSelect)


{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Multiselect = allowMultiSelect;
if (dlg.ShowDialog() == DialogResult.OK)
{
return dlg.FileNames;
}
else
{
return new String[0];
}
}

private void ShowCarrierControl(HideAddCarrierControl ctl)


{
ctl.Dock = DockStyle.Fill;
tabHide.Controls.Add(ctl);
ctl.BringToFront();
ctl.FileSelected += new
HideAddCarrierControl.FileSelectedHandler(hideAddCarrierControl_FileSelected);
ctl.VisibleChanged += new EventHandler(hideAddCarrierControl_VisibleChanged);
}
private Stream GetMessageStream()
{
BinaryWriter messageWriter = new BinaryWriter(new MemoryStream());
if (rdoHideMsgText.Checked)
{
messageWriter.Write(Encoding.Unicode.GetBytes(txtHideMsgText.Text));
}
else
{
FileStream fs = new FileStream(txtHideMsgFile.Text, FileMode.Open,
FileAccess.Read);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
messageWriter.Write(buffer);
fs.Close();
}
messageWriter.Seek(0, SeekOrigin.Begin);
return messageWriter.BaseStream;
}

private MemoryStream GetKeyStream()


{
Stream[] keyStreams = new Stream[lvKeyFiles.Items.Count];
for (int n = 0; n < keyStreams.Length; n++)
{
keyStreams[n] = new FileStream(lvKeyFiles.Items[n].Text, FileMode.Open,
FileAccess.Read);
}

MemoryStream resultKeyStream = new MemoryStream();

long maxLength = 0;
foreach (Stream stream in keyStreams)
{
if (stream.Length > maxLength)
{
maxLength = stream.Length;
}
}
int readByte = 0;
for (long n = 0; n <= maxLength; n++)
{
for (int streamIndex = 0; streamIndex < keyStreams.Length; streamIndex++)
{
if (keyStreams[streamIndex] != null)
{
readByte = keyStreams[streamIndex].ReadByte();
if (readByte < 0)
{
keyStreams[streamIndex].Close();
keyStreams[streamIndex] = null;
}
else
{
resultKeyStream.WriteByte((byte)readByte);
}
}
}
}

resultKeyStream.Seek(0, SeekOrigin.Begin);
return resultKeyStream;
}

private long CountRequiredCarrierUnits(long messageLength)


{
return (messageLength + (4 * lvHideCarriers.Items.Count)) * 8;
}

private void CountRequiredCarrierUnits()


{
Stream message = GetMessageStream();
displayCountOfUnitsHide.CountRequiredCarrierUnits =
CountRequiredCarrierUnits(message.Length);
message.Close();
}

private void CountAvailableCarrierUnits()


{
Stream key = GetKeyStream();
if (key.Length > 0)
{
CarrierFile carrierFile;
long countAvailableUnits = 0;
bool isOkay = true;
for (int n = 0; n < lvHideCarriers.Items.Count; n++)
{
carrierFile = (CarrierFile)lvHideCarriers.Items[n].Tag;

FileUtility utility = FileUtility.CreateFileUtility(carrierFile);


carrierFile.CountUseableCarrierUnits = utility.CountUseableUnits(key)
* carrierFile.CountBitsToHidePerCarrierUnit;
utility = null;

isOkay = true;
if (carrierFile.CountUseableCarrierUnits < 5)
{
if (MessageBox.Show(this,
carrierFile.SourceFileName + " is too small. Remove it from
the list?",
"File cannot be used",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
lvHideCarriers.Items.RemoveAt(n);
n--;
isOkay = false;
}
}

if (isOkay)
{
lvHideCarriers.Items[n].Tag = carrierFile;

lvHideCarriers.Items[n].SubItems[clmUseableCarrierUnits.Index].Text =
carrierFile.CountUseableCarrierUnits.ToString();

countAvailableUnits += carrierFile.CountUseableCarrierUnits;
}
}
displayCountOfUnitsHide.CountAvailableCarrierUnits = countAvailableUnits;

}
else
{ //no key selected
displayCountOfUnitsHide.CountAvailableCarrierUnits = 0;
}
}

private bool IsCarrierFileNameUnique(String fileName)


{
bool returnVar = true;
foreach (ListViewItem item in lvHideCarriers.Items)
{
if (item.SubItems[1].Text == fileName)
{
returnVar = false;
break;
}
}
return returnVar;
}

private void SetHideButtonEnabled()


{
btnHide.Enabled =
((rdoHideMsgFile.Checked && txtHideMsgFile.Text.Length > 0)
|| (rdoHideMsgText.Checked && txtHideMsgText.Text.Length > 0))
&&
(displayCountOfUnitsHide.CountAvailableCarrierUnits >=
displayCountOfUnitsHide.CountRequiredCarrierUnits);
}

private void SetExtractButtonEnabled()


{
btnExtract.Enabled =
((rdoExtractMsgFile.Checked && txtHideMsgFile.Text.Length > 0)
|| rdoExtractMsgText.Checked)
&&
lvKeyFiles.Items.Count > 0;
}

private void hideAddCarrierControl_VisibleChanged(object sender, EventArgs e)


{
panelHide.Visible = !((HideAddCarrierControl)sender).Visible;
}

private void btnKeyFileAdd_Click(object sender, System.EventArgs e)


{
String[] fileNames = ChooseFileName(true);
if (fileNames.Length > 0)
{
foreach (String fileName in fileNames)
{
lvKeyFiles.Items.Add(fileName);
}
}

SetExtractButtonEnabled();
CountAvailableCarrierUnits();
}

private void btnKeyFileRemove_Click(object sender, System.EventArgs e)


{
ListViewItem[] selectedItems = new
ListViewItem[lvKeyFiles.SelectedItems.Count];
for (int n = 0; n < selectedItems.Length; n++)
{
selectedItems[n] = lvKeyFiles.SelectedItems[n];
}

foreach (ListViewItem item in selectedItems)


{
lvKeyFiles.Items.Remove(item);
}

SetExtractButtonEnabled();
CountAvailableCarrierUnits();
}

private void btnHideMsgFileBrowse_Click(object sender, System.EventArgs e)


{
String[] fileNames = ChooseFileName(false);
if (fileNames.Length == 1)
{
txtHideMsgFile.Text = fileNames[0];
}
}

private void txtHideMsgFile_TextChanged(object sender, System.EventArgs e)


{
if (txtHideMsgFile.Text.Length > 0)
{
rdoHideMsgFile.Checked = true;
CountRequiredCarrierUnits();
}
}

private void txtHideMsgText_TextChanged(object sender, System.EventArgs e)


{
if (txtHideMsgText.Text.Length > 0)
{
rdoHideMsgText.Checked = true;
CountRequiredCarrierUnits();
}
}

private void btnExtractMsgFileBrowse_Click(object sender, System.EventArgs e)


{
SaveFileDialog dlg = new SaveFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
txtExtractMsgFile.Text = dlg.FileName;
}
}

private void txtExtractMsgFile_TextChanged(object sender, System.EventArgs e)


{
if (txtExtractMsgFile.Text.Length > 0) { rdoExtractMsgFile.Checked = true; }
}

private void txtExtractMsgText_TextChanged(object sender, System.EventArgs e)


{
if (txtExtractMsgText.Text.Length > 0) { rdoExtractMsgText.Checked = true; }
}

private void rdoHideMsg_CheckedChanged(object sender, System.EventArgs e)


{
if (rdoHideMsgText.Checked)
{
txtHideMsgFile.Text = String.Empty;
}
else
{
txtHideMsgText.Text = String.Empty;
}
}

private void rdoExtractMsg_CheckedChanged(object sender, System.EventArgs e)


{
if (rdoExtractMsgText.Checked)
{
txtExtractMsgFile.Text = String.Empty;
}
else
{
txtExtractMsgText.Text = String.Empty;
}
}
private void btnHideAddCarrierFile_Click(object sender, System.EventArgs e)
{
HideAddCarrierControl ctl = new HideAddCarrierControl();
ShowCarrierControl(ctl);
}

private void hideAddCarrierControl_FileSelected(HideAddCarrierControl sender,


CarrierFile selectedFile)
{
if (IsCarrierFileNameUnique(selectedFile.DestinationFileName))
{
FileUtility utility = FileUtility.CreateFileUtility(selectedFile);
selectedFile.CountCarrierUnits = utility.CountUnits();

ListViewItem item = new ListViewItem(selectedFile.ToStringArray());


item.Tag = selectedFile;
lvHideCarriers.Items.Add(item);

if (lvKeyFiles.Items.Count > 0)
{
CountAvailableCarrierUnits();
}
}
else
{
MessageBox.Show(selectedFile.SourceFileName + " is already in use.");
HideAddCarrierControl ctl = new HideAddCarrierControl(selectedFile);
ShowCarrierControl(ctl);
}
}

private void btnExtractAddCarrierFile_Click(object sender, System.EventArgs e)


{
String[] fileNames = ChooseFileName(true);

this.Cursor = Cursors.WaitCursor;

CarrierFile carrierFile;
ListViewItem item;
foreach (String fileName in fileNames)
{
carrierFile = new CarrierFile(fileName, String.Empty, 0, 0, 0);
FileUtility utility = FileUtility.CreateFileUtility(carrierFile);
carrierFile.CountCarrierUnits = utility.CountUnits();
utility = null;

item = new ListViewItem(carrierFile.ToShortStringArray());


item.Tag = carrierFile;
lvExtractCarriers.Items.Add(item);
}

SetExtractButtonEnabled();

this.Cursor = Cursors.Default;
}

private void btnHideEditCarrierFile_Click(object sender, System.EventArgs e)


{
HideAddCarrierControl ctl = new HideAddCarrierControl(
(CarrierFile)lvHideCarriers.SelectedItems[0].Tag);

ShowCarrierControl(ctl);
lvHideCarriers.Items.Remove(lvHideCarriers.SelectedItems[0]);
}

private void btnHideRemoveCarrierFile_Click(object sender, System.EventArgs e)


{
lvHideCarriers.Items.Remove(lvHideCarriers.SelectedItems[0]);
CountAvailableCarrierUnits();
}

private void btnExtractRemoveCarrierFile_Click(object sender, System.EventArgs e)


{
if (lvExtractCarriers.SelectedItems.Count > 0)
{
lvExtractCarriers.Items.Remove(lvExtractCarriers.SelectedItems[0]);
SetExtractButtonEnabled();
}
}

private void lvHideCarriers_SelectedIndexChanged(object sender, System.EventArgs


e)
{
btnHideRemoveCarrierFile.Enabled
= btnHideEditCarrierFile.Enabled
= (lvHideCarriers.SelectedItems.Count > 0);
}

private void lvKeyFiles_SelectedIndexChanged(object sender, System.EventArgs e)


{
btnKeyFileRemove.Enabled = (lvKeyFiles.SelectedItems.Count > 0);
}

private void btnHide_Click(object sender, System.EventArgs e)


{
//create streams for message and key
Stream message = GetMessageStream();
Stream key = GetKeyStream();

float countAvailableUnits =
displayCountOfUnitsHide.CountAvailableCarrierUnits;

long messageLength = message.Length + (4 * lvHideCarriers.Items.Count);


CarrierFile[] carrierFiles = ListCarrierFiles(lvHideCarriers, messageLength,
countAvailableUnits);

FileUtility utility;

Stream messageWithCount = null;


for (int n = 0; n < carrierFiles.Length; n++)
{
messageWithCount = FileUtility.GetMessagePart(message,
carrierFiles[n].CountBytesToHide);
utility = FileUtility.CreateFileUtility(carrierFiles[n]);
utility.Hide(messageWithCount, key);
}
messageWithCount.Close();
MessageBox.Show("Data hide");
}

private void btnExtract_Click(object sender, System.EventArgs e)


{
Stream message = new MemoryStream();
Stream key = GetKeyStream();

CarrierFile[] carrierFiles = ListCarrierFiles(lvExtractCarriers, 0, 0);

FileUtility utility;
Stream messagePart = new MemoryStream();
byte[] buffer;
for (int n = 0; n < carrierFiles.Length; n++)
{
utility = FileUtility.CreateFileUtility(carrierFiles[n]);
messagePart.SetLength(0);
utility.Extract(messagePart, key);

buffer = new byte[messagePart.Length];


messagePart.Seek(0, SeekOrigin.Begin);
messagePart.Read(buffer, 0, buffer.Length);
message.Write(buffer, 0, buffer.Length);
}

messagePart.Close();
message.Seek(0, SeekOrigin.Begin);

if (rdoExtractMsgFile.Checked)
{
FileStream fs = new FileStream(txtExtractMsgFile.Text, FileMode.Create);
buffer = new byte[message.Length];
message.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, buffer.Length);
fs.Close();
message.Close();
}
else
{
StreamReader reader = new StreamReader(message, Encoding.Unicode);
txtExtractMsgText.Text = reader.ReadToEnd();
reader.Close();

}
MessageBox.Show("Data Extracted");
}

private CarrierFile[] ListCarrierFiles(ListView listview, long messageLength,


float countAvailableUnits)
{
CarrierFile[] carrierFiles = new CarrierFile[listview.Items.Count];
long sumCountBytesToHide = 0;
long maxCountBytesToHide = 0;
int indexMaxCountBytesToHide = 0;

for (int n = 0; n < carrierFiles.Length; n++)


{
carrierFiles[n] = (CarrierFile)listview.Items[n].Tag;

if (messageLength > 0)
{
carrierFiles[n].CountBytesToHide =
(Int32)Math.Ceiling((float)messageLength *
((float)carrierFiles[n].CountUseableCarrierUnits / countAvailableUnits));
sumCountBytesToHide += carrierFiles[n].CountBytesToHide;
if (carrierFiles[n].CountBytesToHide > maxCountBytesToHide)
{
maxCountBytesToHide = carrierFiles[n].CountBytesToHide;
indexMaxCountBytesToHide = n;
}
}
else
{
carrierFiles[n].CountBytesToHide = 0;
}
}

if (sumCountBytesToHide > messageLength)


{
carrierFiles[indexMaxCountBytesToHide].CountBytesToHide -=
(Int32)(sumCountBytesToHide - messageLength);
}

return carrierFiles;
}

private void displayCountOfUnitsHide_ValueChanged(object sender, System.EventArgs


e)
{
SetHideButtonEnabled();
}

private void MainForm_Load(object sender, EventArgs e)


{

private void tabsend_Click(object sender, EventArgs e)


{

private void btnEncrypt_Click(object sender, EventArgs e)


{
MainForm1 m = new MainForm1();
m.Show();

private void button4_Click(object sender, EventArgs e)


{
MainForm1 m = new MainForm1();
m.Show();
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)


{

Screen Shots:
CONCLUSION:

A method of embedding text-based data into a host audio file using the method of bit
modification has been presented in this paper. A procedure has been developed in which the data
field is edited to embed intended data into the audio file. To proceed with this, the header section
of the audio has been checked perfectly because a minimal change in the header section may
leads to a corruption of whole audio file. In this algorithm, as an experiment first 50 bytes have
been left untouched and starting from the 51st bytes every alternate sample has been modified to
embed textual information. How the performance is affected by changing different bit fields has
not been reported in this work. However a rough study was made to see how the changing of a
specific bit field creates degradation in the host audio file and in which point it leads to
perceptible change in the audible sound quality to any other third party other than the sender or
receiver. It was noticed that changing the least significant bit of the bytes gave the best results.
An audio file with size 952 KB has been used. The maximum text file size that can be embedded
in this audio file without degrading the file structure can be traced through a survey. The main
goal of this research work was embedding of text into audio as a case of steganography. The two
primary criteria for successful steganography are that the stego signal resulting from embedding
is perceptually indistinguishable from the host audio signal, and the embedded message is
recovered correctly at the receiver. In test cases the text-based data has been successfully

You might also like