Perbandingan Algoritma Steganografi echo Data Hiding Dan Low Bit Encoding Dalam Pengamanan File

A-1

LAMPIRAN A : LISTING PROGRAM

1. Form Utama
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Text;
using System.Threading;

namespace StegoAudio
{ public formStego(){InitializeComponent();}
protected override void Dispose( bool disposing ) {
if( disposing ) {if (components != null) {components.Dispose();}}
base.Dispose( disposing ); }
private void OpenFileDialog(FileDialog dialog, TextBox control, bool useFilter)

{if (useFilter) {dialog.Filter = "Wave Audio (*.wav)|*.wav";}
if (dialog.ShowDialog(this) == DialogResult.OK)
{ control.Text = dialog.FileName; }}
private void OpenFileDialog2(OpenFileDialog dlg, TextBox txtKeyFile, bool
useFilter)
{if (useFilter)
{dlg.Filter = "File (*.txt)|*.txt";}
if (dlg.ShowDialog(this) == DialogResult.OK)
{txtKeyFile.Text = dlg.FileName; }}
private void OpenFileDialog3(OpenFileDialog dlg, TextBox txtMsgFile, bool
useFilter)
{if (useFilter)
{dlg.Filter = "File (*.txt)|*.txt";}
if (dlg.ShowDialog(this) == DialogResult.OK)
{txtMsgFile.Text = dlg.FileName; }}
private void SaveFileDialog(FileDialog dialog, TextBox control, bool useFilter)
{if (useFilter)

Universitas Sumatera Utara


A-2

{dialog.Filter = "Wave Audio (*.wav)|*.wav";}
if (dialog.ShowDialog(this) == DialogResult.OK)
{control.Text = dialog.FileName; }}
private void Audio_Click(object sender, System.EventArgs e) {
OpenFileDialog dlg = new OpenFileDialog();
OpenFileDialog(dlg, txtAudio, true); }
private void StegoAudio_Click(object sender, System.EventArgs e){
SaveFileDialog dlg = new SaveFileDialog();
OpenFileDialog(dlg, txtStegoAudio, true); }
private void KeyFile_Click(object sender, System.EventArgs e) {
OpenFileDialog dlg = new OpenFileDialog();
OpenFileDialog2(dlg, txtStegoKey, true); }
private void HideFile_Click(object sender, System.EventArgs e) {
OpenFileDialog dlg = new OpenFileDialog();
OpenFileDialog3(dlg, txtHideFile, true);
rdoHideFile.Checked = true;}
private void SaveFIle_Click(object sender, System.EventArgs e) {
SaveFileDialog dlg = new SaveFileDialog();

OpenFileDialog(dlg, txtHiddenFile, false);
rdoHiddenFile.Checked = true;}
private void HideLBE_Click(object sender, System.EventArgs e) {
if (rdoAudio.Checked && (txtAudio.Text.Length == 0)){
errorProvider.SetError(txtAudio, "Choose an Audio.");}
else if (txtStegoKey.Text.Length == 0){
errorProvider.SetError(txtStegoKey, "Choose a stego key file.");
else if (rdoHideFile.Checked && (txtHideFile.Text.Length == 0)){
errorProvider.SetError(txtHideFile, "msg to hide."); }
else if (rdoHidemsg.Checked && (txtHidemsg.Text.Length == 0)) {
errorProvider.SetError(txtHidemsg, "msg to hide."); }
else if (txtStegoAudio.Text.Length == 0) {
errorProvider.SetError(txtStegoAudio, "Save Stego Audio with new
name."); }
else{
var watch = System.Diagnostics.Stopwatch.StartNew();
Stream carrierStream = null;
FileStream stegoStream = null;
WaveStream audioStream = null;


Universitas Sumatera Utara

A-3

Stream msgStream = GetmsgStream();
Stream StegoKeyStream = new FileStream(txtStegoKey.Text, FileMode.
Open);
try{
long samplesRequired = LBE.CheckKeyForMsg(StegoKeyStream,msgStream.
Length);
if (samplesRequired > Int32.MaxValue) {
throw new Exception("Requires " + samplesRequired + " samples, only "
+Int32.MaxValue + " samples are allowed."); }
if (rdoAudio.Checked) {
carrierStream = new FileStream(txtAudio.Text, FileMode.Open); }
else{ formRecorder recorder = new formRecorder(samplesRequired);
recorder.ShowDialog(this);
carrierStream = recorder.RecordedStream; }
this.Cursor = Cursors.WaitCursor;
stegoStream = new FileStream(txtStegoAudio.Text, FileMode.Create);

audioStream = new WaveStream(carrierStream, stegoStream);
if (audioStream.Length audioStream.CountSamples) {
MessageBox.Show("File carrier too small\r\n" + "Samples available: " +
audioStream.CountSamples + "\r\n" + "Samples needed: " +
samplesRequired + "\r\n" + "\r\n" + "Click OK to record a new sound...." +
"\r\n");
formRecorder recorder = new formRecorder(samplesRequired);
recorder.ShowDialog(this);
carrierStream = recorder.RecordedStream; }
this.Cursor = Cursors.WaitCursor;
LBE combine = new LBE(audioStream, stegoStream);
combine.Hide(msgStream, StegoKeyStream);
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
txtTime.Text = Convert.ToString(elapsedMs +" ms");
MessageBox.Show("Hiding Success");}
catch(Exception ex) {
this.Cursor = Cursors.Default;
Console.WriteLine(ex);


Universitas Sumatera Utara

A-4

MessageBox.Show(ex.Message);}
finally {
if(StegoKeyStream != null){
StegoKeyStream.Close(); }
if(msgStream != null){
msgStream.Close(); }
if(audioStream != null){
audioStream.Close(); }
if(carrierStream != null){
carrierStream.Close(); }
if(stegoStream != null){
stegoStream.Close(); }
this.Cursor = Cursors.Default;} }}
private void ExtractLBE_Click(object sender, EventArgs e) {
if (txtAudio.Text.Length == 0)
{errorProvider.SetError(txtAudio, "Choose Stego Audio.");}

else if (txtStegoKey.Text.Length == 0)
{errorProvider.SetError(txtStegoKey, "Choose a stego key file."); }
else
{ var watch = System.Diagnostics.Stopwatch.StartNew();
Stream carrierStream = null;
FileStream stegoStream = null;
WaveStream audioStream = null;
Stream msgStream = GetmsgStream();
Stream StegoKeyStream = new FileStream(txtStegoKey.Text,
FileMode.Open);
try
{long samplesRequired = LBE.CheckKeyFormsg(StegoKeyStream,
msgStream.Length);
if (samplesRequired > Int32.MaxValue) {
throw new Exception("Requires " + samplesRequired + " samples,
only " + Int32.MaxValue + " samples available.");}
if (rdoAudio.Checked)
{carrierStream = new FileStream(txtAudio.Text, FileMode.Open); }
else{
formRecorder recorder = new formRecorder(samplesRequired);

recorder.ShowDialog(this);
carrierStream = recorder.RecordedStream; }

Universitas Sumatera Utara

A-5

this.Cursor = Cursors.WaitCursor;
stegoStream = new FileStream(txtStegoAudio.Text,
FileMode.Create);
audioStream = new WaveStream(carrierStream, stegoStream);
if (audioStream.Length audioStream.CountSamples)
{MessageBox.Show("File carrier too small\r\n"
+ "Samples available: " + audioStream.CountSamples + "\r\n"
+ "Samples needed: " + samplesRequired + "\r\n" + "\r\n"
+ "Click OK to record a new sound...." + "\r\n");
formRecorder recorder = new formRecorder(samplesRequired);
recorder.ShowDialog(this);
carrierStream = recorder.RecordedStream; }
this.Cursor = Cursors.WaitCursor;

LBE combine = new LBE (audioStream, stegoStream);
combine.embed(msgStream, StegoKeyStream);
watch.Stop();
var elapsedMs = watch.ElapsedMilliseconds;
txtTime.Text = Convert.ToString(elapsedMs + " ms");
MessageBox.Show("Hiding Success");}
catch (Exception ex) {
this.Cursor = Cursors.Default;
Console.WriteLine(ex);
MessageBox.Show(ex.Message); }
finally{
if (StegoKeyStream != null) {
StegoKeyStream.Close(); }
if (msgStream != null) {
msgStream.Close(); }
if (audioStream != null) {
audioStream.Close(); }
if (carrierStream != null) {
carrierStream.Close(); }
if (stegoStream != null) {

stegoStream.Close(); }
this.Cursor = Cursors.Default; }}}
2. Sisip
//LBE
public void Hide(Stream msgStream, Stream StegoKeyStream){
byte[] audioBuffer = new byte[bytesPerSample];

Universitas Sumatera Utara

A-6

byte msg, bit, audioByte;
int msgBuffer;
int keyByte;
while ((msgBuffer = msgStream.ReadByte()) >= 0) {
msg = (byte)msgBuffer;
for (int msgIndex = 0; msgIndex < 8; msgIndex++)
{keyByte = GetKeyValue(StegoKeyStream);
for (int n = 0; n < keyByte - 1; n++){
carrierStream.Copy(audioBuffer, 0, audioBuffer.Length, stegoStream); }

carrierStream.Read(audioBuffer, 0, audioBuffer.Length);
audioByte = audioBuffer[bytesPerSample - 1];
bit = (byte)(((msg & (byte)(1 0) ? 1 : 0);
for (int pattern = 4; pattern >= 1; pattern--){
if ((bit == 1) && ((audioByte % pattern) == 0)) {audioByte += 1; }
else if ((bit == 0) && ((audioByte % pattern) == 1)) {audioByte -= 1; }}
audioBuffer[bytesPerSample - 1] = audioByte;
stegoStream.Write(audioBuffer, 0, bytesPerSample); }}
audioBuffer = new byte[carrierStream.Length - carrierStream.Position];
carrierStream.Read(audioBuffer, 0, audioBuffer.Length);
stegoStream.Write(audioBuffer, 0, audioBuffer.Length); }
public void Extract(Stream msgStream, Stream StegoKeyStream){
byte[] audioBuffer = new byte[bytesPerSample];
byte msg, bit, audioByte;
int msgLength = 0;
int keyByte;
while( (msgLength==0 || msgStream.Length