Implementasi Steganografi Hopping Spread Spectrum Ke Dalam File Video

Lampiran A-1 : Listing Program Main Form
Coding Main Form
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using
using

System;
System.Collections.Generic;

System.ComponentModel;
System.Data;
System.Drawing;
System.Drawing.Imaging;
System.IO;
System.Linq;
System.Text;
System.Threading;
System.Threading.Tasks;
System.Windows.Forms;
Microsoft.Office.Interop.Word;
App = Microsoft.Office.Interop.Word.Application;
AForge.Video.FFMPEG;
System.Diagnostics;

namespace Avi
{
public partial class MainForm : Form
{
Stopwatch stopWatch = new Stopwatch();

public enum SEED_State
{
Accept,
Reject
};
public MainForm()
{
InitializeComponent();
bw1.WorkerSupportsCancellation = true;
bw1.WorkerReportsProgress = true;
splashPanel.Hide();
brwEmbedVideo.Filter = "*.avi|*.avi";
brwEmbedText.Filter =
*.docx|*.docx|*.doc|*.doc|*.rtf|*.rtf|*.txt|*.txt";
saveEmbedVideo.DefaultExt = "*.avi|*.avi";
saveEmbedVideo.Filter = "*.avi|*.avi";
brwExtractVideo.Filter = "*.avi|*.avi";
}

VideoFileReader reader;

int frameCount = 0;
string embedText="", extractText="";
List oriBitmap, embedBitmap;
uint[] randomList;
uint SEED, newSEED;

private void btn_embvideo_Click(object sender, EventArgs e)
{
string fileEmbedVideo;
btn_embvideo.Enabled = false;
oriBitmap = new List();

A- 1
Universitas Sumatera Utara

if (brwEmbedVideo.ShowDialog() == DialogResult.OK)
{
frameCount = 0;
bw1.RunWorkerAsync();
fileEmbedVideo = brwEmbedVideo.FileName;

tb_embvideo.Text = fileEmbedVideo;
reader = new VideoFileReader();
reader.Open(fileEmbedVideo);
while (true)
{
using (var videoFrame = reader.ReadVideoFrame())
{
using (MemoryStream memory = new MemoryStream())
{

if (videoFrame == null)
break;
else
{
frameCount++;
videoFrame.Save(memory, ImageFormat.Bmp);
oriBitmap.Add(new Bitmap(videoFrame));
}
}
}

}
Thread.Sleep(100);
pb_embvideo.Image = new Bitmap(oriBitmap[0]);
}
else
{
bw1.CancelAsync();
btn_embvideo.Enabled = true;
}
Console.WriteLine("Framecount : "+frameCount);
}

private void btn_embtext_Click(object sender, EventArgs e)
{
embedText = "";
string fileEmbedText;
btn_embtext.Enabled = false;
if (brwEmbedText.ShowDialog() == DialogResult.OK)
{
bw1.RunWorkerAsync();

fileEmbedText = brwEmbedText.FileName;
App app = new App();
Document doc = app.Documents.Open(fileEmbedText);
foreach (Paragraph p in doc.Paragraphs)
embedText += p.Range.Text.Trim();
((_Document)doc).Close();

A-2
Universitas Sumatera Utara

((_Application)app).Quit();
rtb_teks.Text = embedText;
tb_embteks.Text = fileEmbedText;
randomList = new uint[embedText.Length];
tb_embperiode.Text = embedText.Length.ToString();
}
else
{
bw1.CancelAsync();
btn_embtext.Enabled = true;

}
}
private void btn_embembed_Click(object sender, EventArgs e)
{
List randomList = new List();
stopWatch.Reset();
btn_embembed.Enabled = false;
stopWatch.Start();
if (!(tb_embvideo.Text == "" || tb_embteks.Text == "" ||
tb_embseed.Text == ""))
{
bw1.RunWorkerAsync();
SEED_State seed_state = SEED_State.Reject;
embedBitmap = new List(oriBitmap);
SEED = uint.Parse(tb_embseed.Text);
newSEED = SEED;
LFSR.setSEED(SEED);
if (embedText.Length > 2) ^ (lfsr >> 6) ^ (lfsr >> 7))
& 1;
lfsr = (lfsr >> 1) | (bit = text.Length)

{
// start adding zeros to mark the end of the
text
state = State.Filling_With_Zeros;
}
else
{
// move to the next character and process again
charValue = text[charIndex++];
}
}
// check which pixel element has the turn to hide a bit
in its LSB

//
//
//
//
//


switch (pixelElementIndex % 3)
{
case 0:
{
if (state == State.Hiding)
{
the rightmost bit in the character will be (charValue % 2)
to put this value instead of the LSB of the pixel element
just add it to it
recall that the LSB of the pixel element had been cleared
before this operation
R += charValue % 2;

// removes the added rightmost bit of the character
// such that next time we can reach the next one
charValue /= 2;
}
} break;
case 1:
{

if (state == State.Hiding)

C-2
Universitas Sumatera Utara

{
G += charValue % 2;
charValue /= 2;
}
} break;
case 2:
{
if (state == State.Hiding)
{
B += charValue % 2;
charValue /= 2;
}
bmp.SetPixel(j, i, Color.FromArgb(R, G,
B));
} break;

}
pixelElementIndex++;
if (state == State.Filling_With_Zeros)
{
// increment the value of zeros until it is 8
zeros++;
}
}
}
}
return bmp;
}
public static string extractText(Bitmap bmp)
{
int colorUnitIndex = 0;
int charValue = 0;
// variable penyimpan hasil ekstraksi
string extractedText = String.Empty;
// membaca setiap kolom
for (int i = 0; i < bmp.Height; i++)
{
// membaca setiap kolom
for (int j = 0; j < bmp.Width; j++)
{
Color pixel = bmp.GetPixel(j, i);
// for each pixel, pass through its elements (RGB)
for (int n = 0; n < 3; n++)
{
switch (colorUnitIndex % 3)
{
case 0:
{
charValue = charValue * 2 + pixel.R % 2;
} break;
case 1:

C-3
Universitas Sumatera Utara

{
charValue = charValue * 2 + pixel.G % 2;
} break;
case 2:
{
charValue = charValue * 2 + pixel.B % 2;
} break;
}
colorUnitIndex++;
// if 8 bits has been added,
// then add the current character to the result text
if (colorUnitIndex % 8 == 0)
{
// reverse? of course, since each time the process
occurs
// on the right (for simplicity)
charValue = reverseBits(charValue);
// can only be 0 if it is the stop character (the 8
zeros)
if (charValue == 0)
{
return extractedText;
}
// convert the character value from int to char
char c = (char)charValue;
// add the current character to the result text
extractedText += c.ToString();
}
}
}
}
return extractedText;
}
public static int reverseBits(int n)
{
int result = 0;
for (int i = 0; i < 8; i++)
{
result = result * 2 + n % 2;
n /= 2;
}
return result;
}
}
}

C-4
Universitas Sumatera Utara

Lampiran D Angket

Apakah ada perbedaan antara kedua video tersebut?
No
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Nama

Jawaban
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/
Ya
/

Keterangan
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak
Tidak

D-1
Universitas Sumatera Utara

DAFTAR RIWAYAT HIDUP

Data Pribadi

Nama

:

Ricky Steven

Tempat, tanggal Lahir :

Medan, 13 Maret 1993

Jenis Kelamin

:

Laki-Laki

Umur

:

23 tahun

Tinggi, berat badan

:

178cm , 75 kg

Agama

:

Buddha

Alamat

: Jalan Brig. Zein Hamid No 43A LK XI

Status

:

Belum Kawin

Telepon

:

083198808098

Email

:

rickysteven@ymail.com

Latarbelakang Pendidikan :

Formal
1997 – 2003

: Lulusan SD Sutomo 1 Medan

2003 – 2006

: Lulusan SMP Sutomo 1 Medan

2006 – 2011

: Lulusan SMA Sutomo 1 Medan

Non Formal
2002 – 2010
2011

: Bimbingan bahasa Inggris di Winfield
: Workshop 3D Animation Revolution with DreamArch
Animation
E-1
Universitas Sumatera Utara

2011

: Workshop Menggambar Manga by Mieko 2011.

2011

: Workshop Earn Money from Design Artechno
Festival

2011

: Workshop Networking by GONES Artechno Festival

2012

: PPO Basic Training of KMB USU

2012

: Workshop Linux Configuration (KSL USU).

2012

: Workshop Pintar Programming Teknonesia.

2012

: Information Technology Seminar : “Pemanfaatan
Teknologi Open Source sebagai Aplikasi dalam Dunia
Bisnis Global”.

2012

: Information Technology Seminar : “Kupas Tuntas
Blackberry, iOS & Android”.

2012

: Based Training Organization : “Personal Branding –
That’s You”. DJARUM foundation.

2012

: Based Training Organization : “Public Speaking and
Presentation Skill”. Tanoto Foundation.

2012

: Motivation Training : “Masa Orientasi IMILKOM
2012”. Graduate Study Program of Computing Science

2014

: Liason Officer Indonesia, Malaysia, Thailand
Gathering Triangle (IMT-GT)

2015

: Liasion Officer (LO) Kegiatan Forum Rektor Indonesia
XVII di Universitas Sumatera Utara

2016

: Volunteer dalam partisipasi Education Expo

Pengalaman Organisasi

 2009 – 2011
 2012 – 2013

: Anggota dari Programming Club Sutomo 1
: Anggota Divisi Khusus dari Keluarga Mahasiswa
Buddhis di Universitas Sumatera Utara

E-2
Universitas Sumatera Utara

 2013 – 2014
 2013 – 2014
 2013 – 2014
 2013 – 2014

: Anggota Divisi Kewirausahaan dari Keluarga
Mahasiswa Buddhis di Universitas Sumatera Utara
: Anggota PEMA Fasilkom-TI divisi kerohanian agama
Buddha
: Ketua Komisi Pemilihan Umum (KPU) Imilkom
: Ketua Tanoto Scholars Association Medan

Penghargaan

 2012
 2013

: Penghargaan sebagai Juara 1 Programming pada
“Imilkom Contest 2012”
: Penghargaan sebagai “Best Tanoto Association” seIndonesia ketika menjabat sebagai ketua

Pengalaman Kerja



2009-2012

: Bekerja pada perusahaan pengolahan biji kemiri di
Namorambe
Rincian Pekerjaan:

Melakukan pembagian perkerjaan kepada pekerja untuk mencapai
target produksi

Pengoperasian mesin pengaduk, mesin penggiling dan mesin penjahit

Pengoperasian forklift

Melakukan pembagian upah dan absensi terhadap pegawai secara
manual untuk lebih dari 50 pegawai

Pendapatan 3 juta
Praktek Kerja Lapangan di di Kantor Dinas Pendapatan Negara Medan
Periode
: Agustus 2014 – Oktober 2014
Tujuan
: Mata Kuliah Wajib
Posisi
: Konsultan IT dan Programmer
Rincian Pekerjaan:

Mengorganisir data 5 tahun dan lebih dan menyusunnya sehingga
dapat di direkapitulasi.

Membangun sebuah program dengan menggunakan Microsoft Excel
dan Makro untuk menangani tunggakan pajak di seluruh Kabupaten
Kota Medan

Pendapatan : 0

E-3
Universitas Sumatera Utara

2013-2017

: Bekerja di Scholars Hub sebagai pengajar dan pernah menjadi
kepala divisi
Rincian Pekerjaan:
 Melakukan pengajaran terhadap pelajaran Mate, Fisika dan Kimia untuk
tingkat IGCSE, O Level dan A level untuk kurikulum internasional dan
tingkat smp dan sma untuk tingkat nasional
 Melakukan pelatihan terhadap guru baru
 Melakukan evaluasi terhadap siswa
 Pendapatan : 5 juta

Kemampuan


Kemampuan Komputer
Office
1. Microsoft Word
2. Microsoft Excel
3. Microsoft Power Point
4. Microsoft Access
Design & Video
1. Adobe Photoshop
2. Adobe Dreamweaver
3. Adobe Ilustrator
Pemrograman
1.
2.
3.
4.
5.
6.

Visual Studio
Eclipse
Visual Basic
Unity
MatLab
FoxPro

Medan, 30 Januari 2017
Hormat saya,

Ricky Steven
E-4
Universitas Sumatera Utara