i
Universitas Kristen MaranathaPROTEKSI HAK CIPTA MENGGUNAKAN WATERMARKING LSB
PADA GAMBAR DIGITAL
Ivan Renaldi / 0827012
Jurusan Sistem Komputer, Fakultas Teknik,
Universitas Kristen Maranatha
Jalan Prof. drg. Suria Sumantri, MPH. No 65
Bandung 40164, Indonesia
ABSTRAK
ii
Universitas Kristen MaranathaCOPYRIGHT PROTECTION IN DIGITAL IMAGES USING LSB
WATERMARKING
Ivan Renaldi / 0827012
Department of Computer Engineering, Faculty of Engineering,
Maranatha Christian University
Prof. drg. Suria Sumantri, MPH. No 65
Bandung 40164, Indonesia
ABSTRACT
iii
Universitas Kristen Maranatha1.5. Sistematika Penulisan... 3
BAB II KERANGKA TEORITIS ... 5
2.1. Steganografi ... 5
2.1.1. Sejarah Steganografi ... 7
2.1.2. Steganografi Digital ... 8
2.1.3. Kriteria Steganografi ... 11
2.2. Watermarking ... 12
2.3. Least Significant Bit ... 15
2.4. Borland Delphi ... 18
2.4.1. Sejarah Delphi ... 19
2.4.2. Integrated Development Environment (IDE) Delphi ... 21
2.4.3. Hal Umum Tentang Delphi ... 22
2.4.4. Struktur Pemograman Delphi ... 23
2.4.5. Kegunaan Delphi ... 24
2.4.6. Keunggulan dan Kelemahan Delphi ... 24
2.4.7. Borland Delphi 7.0 ... 25
BAB III PERANCANGAN DAN PEMODELAN ... 27
3.1. Blok Diagram ... 27
3.2. Flowchart ... 29
BAB IV HASIL DAN PEMBAHASAN ... 32
4.1. Pengujian Software... 32
4.1.1. Form Home ... 32
4.1.2. Form Encrypt ... 33
4.1.3. Form Decrypt ... 42
4.2. Pengamatan hasil Encrypt ... 49
4.2.1. Pengamatan hasil encrypt pertama ... 49
4.2.2. Pengamatan hasil encrypt kedua ... 49
4.2.3. Pengamatan hasil encrypt ketiga ... 50
4.3. Pengamatan hasil Decrypt ... 51
4.3.1. Pengamatan hasil decrypt pertama ... 52
4.3.2. Pengamatan hasil decrypt kedua ... 52
4.3.3. Pengamatan hasil decrypt ketiga ... 53
iv
Universitas Kristen Maranatha4.4.1. Pengamatan hasil percobaan pertama ... 54
4.4.2. Pengamatan hasil percobaan kedua ... 56
4.4.3. Pengamatan hasil percobaan ketiga ... 58
BAB V KESIMPULAN DAN SARAN ... 62
5.1. Kesimpulan ... 62
5.2. Saran ... 63
v
Universitas Kristen MaranathaDAFTAR TABEL
Tabel 4.1 Tabel pengujian Encrypt pertama ... 49
Tabel 4.2 Tabel pengujian Encrypt kedua... 50
Tabel 4.3 Tabel pengujian Encrypt ketiga ... 51
Tabel 4.4 Tabel pengujian Decrypt pertama ... 52
Tabel 4.5 Tabel pengujian Decrypt kedua ... 52
Tabel 4.6 Tabel pengujian Decrypt ketiga ... 53
Tabel 4.7 Pengamatan pengujian pertama ... 54
Tabel 4.8 Pengamatan pengujian kedua ... 56
vi
Universitas Kristen MaranathaDAFTAR GAMBAR
Gambar 2.1. Contoh LSB dan MSB ... 16
Gambar 2.2. IDE Delphi ... 21
Gambar 3.1. Blok diagram encrypt ... 27
Gambar 3.2. Blok diagram decrypt ... 28
Gambar 3.3. Flowchart program ... 29
Gambar 4.1. Tampilan form awal ... 32
Gambar 4.2. Tampilan form encrypt ... 33
Gambar 4.3. Tampilan Open file ketika tombol Open ditekan ... 33
Gambar 4.4. Tampilan form sesudah memilih file ... 34
Gambar 4.5. Tampilan form ketika tombol Reset ditekan ... 34
Gambar 4.6. Tampilan form pengisian password dan juga content yang
belum diisi ketika tombol Next ditekan ... 35
Gambar 4.7. Tampilan form pengisian password dan juga content yang
sudah diisi ketika tombol Next ditekan ... 36
Gambar 4.8. Tampilan form ketika tombol Reset ditekan ... 36
Gambar 4.9. Tampilan form ketika tombol Encode ditekan ... 37
Gambar 4.10. Tampilan form dan warning ketika tombol Encode ditekan,
tetapi file carrier sudah pernah disisipi data ... 38
Gambar 4.11. Tampilan form dan warning ketika tombol Encode ditekan,
tetapi carrier terlalu besar ukurannya ... 39
Gambar 4.12. Tampilan form dan warning ketika tombol Encode ditekan,
tetapi isi dari text box password dan confirm password tidak sama ... 40
Gambar 4.13. Tampilan form dan warning ketika tombol Encode ditekan,
tetapi content belum diisi ... 41
Gambar 4.14. Tampilan form decrypt ... 42
Gambar 4.15. Tampilan Open file ketika tombol Open ditekan ... 42
Gambar 4.16. Tampilan form sesudah memilih file ... 43
Gambar 4.17. Tampilan form ketika tombol Reset ditekan ... 43
Gambar 4.18. Tampilan form pengisian password yang belum diisi ketika
tombol Next ditekan ... 44
Gambar 4.19. Tampilan form pengisian password yang sudah diisi ketika
tombol Next ditekan ... 45
Gambar 4.20. Tampilan form ketika tombol Reset ditekan ... 45
Gambar 4.21. Tampilan yang berisi content dari gambar ... 46
Gambar 4.22. Tampilan form dan warning ketika tombol Encode ditekan,
tetapi password yang dimasukan tidak sesuai ... 47
A-1
unit uMain; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls, ExtCtrls, ExtDlgs, DCPcrypt2, DCPrc4, DCPsha1, sSkinManager, Menus;
type
TfrmMain = class(TForm)
OpenPictureDialog1: TOpenPictureDialog; SavePictureDialog1: TSavePictureDialog; sSkinManager1: TsSkinManager;
A-2
procedure btnEncodeClick(Sender: TObject); procedure btnDecodeClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure OpEncodeClick(Sender: TObject); procedure OpDecodeClick(Sender: TObject); procedure NextEncodeClick(Sender: TObject); procedure NextDecodeClick(Sender: TObject); procedure BackEncodeClick(Sender: TObject); procedure BackDecodeClick(Sender: TObject); procedure moEncodeChange(Sender: TObject); procedure edEncodePass1Change(Sender: TObject); procedure edEncodePass2Change(Sender: TObject); procedure Home1Click(Sender: TObject);
procedure Encrypt1Click(Sender: TObject); procedure Decrypt1Click(Sender: TObject); procedure Exit1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure ResetEncodeClick(Sender: TObject); procedure ResetDecodeClick(Sender: TObject); procedure ResetEncode2Click(Sender: TObject); procedure ResetDecode2Click(Sender: TObject); private
{ Private declarations }
function CarrierCheck(img: TBitmap): Boolean; function doDecrypt(Pass, Content: String): String; function doEncrypt(Pass, Content: String): String; procedure Encode;
frmMain: TfrmMain; Bmp: TBitmap; implementation {$R *.dfm}
function getByte(Number: Byte): String; var i : integer;
A-3
function getWord(Number: Word): String; var i : integer;
Bit : String[1]; Return : string[16]; begin
i := 0;
Return := '0000000000000000'; if Number <> 0 then begin
A-4
end;
procedure TfrmMain.Encode; var i, j, k, x, LSBCount: Integer; Red, Green, Blue: Integer;
strMark, bitMark, bitContent, tempContent: String; bitRed, bitGreen, bitBlue: String;
bitBaris, bitKolom: String; begin
Bmp.Assign(imgEncode.Picture.Bitmap); Bmp.PixelFormat := pf24bit;
if CarrierCheck(Bmp) then begin
MessageDlg('File carrier sudah disisipi data.',mtWarning,[mbOK],0); Exit;
end;
LSBCount := (Bmp.Width * Bmp.Height) * 3; LSBCount := LSBCount - (Bmp.Width * 3);
tempContent := edEncodePass1.Text + '#' + moEncode.Lines.Text; tempContent := doEncrypt(edEncodePass1.Text, tempContent); for i := 1 to Length(tempContent) do begin
bitContent := bitContent + getByte(Ord(tempContent[i])); end;
if Length(bitContent) > LSBCount then begin
MessageDlg('Content yang akan diisikan terlalu besar.',mtWarning,[mbOK],0); Exit;
A-5
Bmp.Canvas.Pixels[i,0] := RGB(Red,Green,Blue); end;
k := 1;
for i := 1 to Bmp.Height - 1 do begin for j := 0 to Bmp.Width - 1 do begin
A-6
for x := 8 to 15 do begin
Red := GetRValue(GetPixel(Bmp.Canvas.Handle,x,0)); Green := GetGValue(GetPixel(Bmp.Canvas.Handle,x,0)); Blue := GetBValue(GetPixel(Bmp.Canvas.Handle,x,0)); bitRed := getByte(Red);
bitGreen := getByte(Green); Delete(bitRed,8,1);
Delete(bitGreen,8,1);
bitGreen := bitGreen + bitBaris[k]; bitRed := bitRed + bitBaris[k+1]; k := k + 2;
Red := getDecimal(bitRed); Green := getDecimal(bitGreen);
Bmp.Canvas.Pixels[x,0] := RGB(Red,Green,Blue); end;
k := 1;
bitKolom := getWord(j);
for x := 16 to 23 do begin
Red := GetRValue(GetPixel(Bmp.Canvas.Handle,i,0)); Green := GetGValue(GetPixel(Bmp.Canvas.Handle,i,0)); Blue := GetBValue(GetPixel(Bmp.Canvas.Handle,i,0)); bitRed := getByte(Red);
bitGreen := getByte(Green); Delete(bitRed,8,1);
Delete(bitGreen,8,1);
bitGreen := bitGreen + bitKolom[k]; bitRed := bitRed + bitKolom[k+1]; k := k + 2;
Red := getDecimal(bitRed); Green := getDecimal(bitGreen);
A-7
end;
Self.Cursor := crDefault;
if SavePictureDialog1.Execute then begin SavePictureDialog1.DefaultExt := '*.bmp'; Bmp.SaveToFile(SavePictureDialog1.FileName); end;
end;
procedure TfrmMain.Decode; var i, j, k: Integer;
Red, Green, Blue: Integer; bitContent, tempContent: String; bitRed, bitGreen, bitBlue: String; bitBaris, bitKolom: String; Baris, Kolom: Integer; begin
Bmp.Assign(imgDecode.Picture.Bitmap); Bmp.PixelFormat := pf24bit;
if not CarrierCheck(Bmp) then begin
MessageDlg('File gambar tidak mengandung pesan.',mtWarning,[mbOK],0); Exit;
end;
bitBaris := '';
for k := 8 to 15 do begin
Red := GetRValue(GetPixel(Bmp.Canvas.Handle,k,0)); Green := GetGValue(GetPixel(Bmp.Canvas.Handle,k,0)); bitBaris := bitBaris + getByte(Green)[8] + getByte(Red)[8]; end;
Baris := getDecimal(bitBaris); bitKolom := '';
for k := 16 to 23 do begin
Red := GetRValue(GetPixel(Bmp.Canvas.Handle,k,0)); Green := GetGValue(GetPixel(Bmp.Canvas.Handle,k,0)); bitKolom := bitKolom + getByte(Green)[8] + getByte(Red)[8];
Red := GetRValue(GetPixel(Bmp.Canvas.Handle,j,i)); Green := GetGValue(GetPixel(Bmp.Canvas.Handle,j,i)); Blue := GetBValue(GetPixel(Bmp.Canvas.Handle,j,i)); bitRed := getByte(Red);
A-8
bitBlue := getByte(Blue);
tempContent := tempContent + Copy(bitBlue,8,1) + Copy(bitGreen,8,1) + Copy(bitRed,8,1); if (Baris = i) and (Kolom = j) then Break;
bitContent := bitContent + Chr(getDecimal(Copy(tempContent,k,8))); k := k + 8;
end;
bitContent := doDecrypt(edDecodePass1.Text,bitContent);
if edDecodePass1.Text = Copy(bitContent,1,Length(edDecodePass1.Text)) then
moDecode.Lines.Text := StringReplace(bitContent,edDecodePass1.Text+'#','',[rfReplaceAll]) else MessageDlg('Password salah.',mtWarning,[mbOK],0);
end;
function TfrmMain.CarrierCheck(img: TBitmap): Boolean; var i: Integer;
Red := GetRValue(GetPixel(img.Canvas.Handle,i,0)); Green := GetGValue(GetPixel(img.Canvas.Handle,i,0)); Blue := GetBValue(GetPixel(img.Canvas.Handle,i,0));
bitLSB := bitLSB + getByte(Blue)[8] + getByte(Green)[8] + getByte(Red)[8]; end;
strMark := Chr(getDecimal(Copy(bitLSB,1,8))) + Chr(getDecimal(Copy(bitLSB,9,8))) +
A-9
end;
if imgEncode.Picture.Bitmap = nil then begin
MessageDlg('File carrier belum dipilih',mtWarning,[mbOK],0); Exit;
end;
if Trim(moEncode.Lines.Text) = '' then begin
MessageDlg('Content belum diisi',mtWarning,[mbOK],0); Exit;
OpenPictureDialog1.Filter := 'Bitmaps (*.bmp)|*.bmp'; OpenPictureDialog1.DefaultExt := '*.bmp';
if OpenPictureDialog1.Execute then begin bmp := TBitmap.Create;
bmp.LoadFromFile(OpenPictureDialog1.FileName);
imgEncode.Picture.LoadFromFile(OpenPictureDialog1.FileName); FreeAndNil(bmp);
OpenPictureDialog1.Filter := 'Bitmaps (*.bmp)|*.bmp'; OpenPictureDialog1.DefaultExt := '*.bmp';
A-10
bmp.LoadFromFile(OpenPictureDialog1.FileName);
imgDecode.Picture.LoadFromFile(OpenPictureDialog1.FileName); FreeAndNil(bmp);
if (edEncodePass1.Text ='') and (moEncode.Text ='') then begin
A-11
procedure TfrmMain.edEncodePass2Change(Sender: TObject); begin
if (edEncodePass1.Text ='') and (moEncode.Text ='') then begin
imgEncode.Picture.Assign(nil); moEncode.Clear;
edEncodePass1.Clear; edEncodePass2.Clear; ResetEncode.enabled :=false;
NextEncode.enabled :=false; end;
procedure TfrmMain.ResetDecodeClick(Sender: TObject); begin
A-12
edDecodePass1.Clear; NextDecode.enabled :=false; ResetDecode.enabled :=false; end;
procedure TfrmMain.ResetEncode2Click(Sender: TObject); begin
moEncode.Clear;
edEncodePass1.Clear; edEncodePass2.Clear; end;
procedure TfrmMain.ResetDecode2Click(Sender: TObject); begin
moDecode.Clear; edDecodePass1.Clear; end;
1
Universitas Kristen MaranathaBAB I
PENDAHULUAN
1.1.
Latar Belakang
Seiring dengan perkembangan komputer, internet dan perangkat
–
perangkat lainnya yang serba digital, telah membuat data digital banyak
digunakan karena mudah diduplikasi, mudah diolah, serta mudah
didistribusikan. Internet sebagai salah satu media informasi dan
telekomunikasi yang banyak digunakan saat ini, menyebabkan distribusi
data digital semakin mudah, sehingga membuat kepemilikan atau hak cipta
dari suatu data digital menjadi sesuatu yang penting.
Salah satu teknik pengamanan hak cipta suatu data digital adalah
watermarking. Digital watermark adalah penanda atau tanda tangan digital
dari sang pembuat data digital. Dengan digital watermark sebuah gambar
menjadi berisi informasi tentang pemilik atau pembuat gambar tersebut.
Watermark ini akan tetap berada dalam gambar tersebut walaupun terlepas
dari jalur koneksi internet. Tidak peduli di mana gambar digital tersebut
berada, orang lain dapat menemukan kepemilikan hak cipta gambar
2
Universitas Kristen Maranatha
Watermarking merupakan cabang dari steganografi, steganografi
adalah seni dan ilmu menulis atau menyembunyikan pesan tersembunyi
dalam suatu media dengan suatu cara tanpa menunjukkan perubahan yang
nyata atau terasa dalam kualitas dan struktur dari media semula, sehingga
selain orang yang berwenang tidak ada seorangpun yang mengetahui atau
menyadari bahwa ada suatu pesan rahasia di dalamnya.
Digital watermarking merupakan salah satu bentuk pengembangan
metode steganografi yang sebenarnya lebih ditekankan pada fungsionalitas
dari data digital yang disisipkan, maupun data digital yang digunakan
sebagai media penyimpanan. Setiap orang tidak dapat watermarking
secara kasat mata namun dengan suatu program dapat menunjukan milik
siapa gambar itu.
Metode yang dipakai dalam program watermarking ini adalah LSB
(Least Significant Bit). Watermarking ini mengambil bit terakhir dari
media penyimpanan yang akan diisikan informasi, dan menggantinya
dengan bit dari informasi tersebut.
Dengan diterapkannya teknik watermarking diharapkan akan
menyelesaikan masalah hak cipta pada gambar digital. Hal tersebutlah
yang membuat penulis ingin membuat Tugas Akhir dengan judul Proteksi
3
Universitas Kristen Maranatha
1.2.
Rumusan Masalah
Beberapa masalah yang akan dibahas pada Tugas Akhir ini adalah:
1.
Bagaimana mempraktekan menyisipkan sebuah informasi ke dalam
file gambar.
2.
Bagaimana perubahan yang terjadi pada file bitmap setelah
disisipkan informasi.
1.3.
Tujuan Penelitian
Tujuan dari Tugas Akhir ini adalah :
Dapat mengaplikasikan digital watermarking pada file gambar.
1.4.
Pembatasan Masalah
Bentuk data yang dipakai dalam penyisipan informasi ini berupa
file bitmap 24-bit dengan format *.bmp.
Besar dari file carrier harus lebih besar daripada content.
Content yang sudah disisipkan dengan program ini hanya dapat
dilihat dengan menggunakan program ini.
1.5.
Sistematika Penulisan
Bab I
: Pendahuluan
Membahas tentang latar belakang, identifikasi masalah,
4
Universitas Kristen Maranatha
Bab II
: Teori Pendahuluan
Membahas tentang teori
–
teori yang menunjang topik
Tugas Akhir.
Bab III
: Perancangan dan Pemodelan
Membahas tentang perancangan program watermarking
LSB pada gambar bitmap.
Bab IV
: Pengamatan Data
Membahas
tentang
hasil
rancangan
program
watermarking LSB pada gambar bitmap.
Bab V
: Kesimpulan dan Saran
Berisi kesimpulan dan saran dari program watermarking
62
Universitas Kristen MaranathaBAB V
KESIMPULAN DAN SARAN
5.1.
Kesimpulan
Perancangan program watermarking dengan menggunakan algoritma
Least Significant Bit sudah dapat direalisasikan.
Steganografi yang telah dihasilkan dari implementasi algoritma LSB
(Least Significant Bit) dapat digunakan dengan baik untuk
menyembunyikan pesan di dalam pesan sebuah image atau file citra
digital.
Gambar yang sudah ter-watermark memiliki kualitas yang hampir
sama dibandingkan dengan gambar aslinya dan sangat sulit untuk
dibedakan oleh penglihatan manusia dikarenakan penyisipan dilakukan
dengan mengganti bit
–
bit terakhir dari masing
–
masing biner file
63
Universitas Kristen Maranatha