my silly steganography!

Ga tau gw tadi siang kesambet setan apa ga ada angin ga ada ujan, tau2 kepengen bikin aplikasi kecil buat steganography gitu. Gw sendiri ga seberapa paham steganography tu apaan, yang jelas yang ada dalem kepala gw adalah gw pengen nyembunyiin teks ke dalem satu file gambar, yang kalo diliat biasa teks itu ga keliatan sama sekali. Tapi kalo gambar yang sok inosen itu dibaca dengan algo tertentu, kebaca deh pesan rahasianya. Kekekeke. Dari tadi sih udah bikin algo encode/decode-nya, cuman aplikasi benerannya belom. Prosesnya karena gw ga bisa mikir yang ruwet2, kayanya sih cuman algo ecek2 gitu, tapi bodoh ah. jadi kira2 kaya gini (don't blame yourself kalo ga ngerti, gw juga sebenernya ga seberapa paham, ha2): Pertama2, tiap gambar itu terdiri dari pixel2. Tiap pixel memiliki value warna tersendiri, dalam range hex antara 000000 (black) ampe FFFFFF (white). Nah, kalo angka itu kita pecah lagi, kita dapetin nilai RGB(red, green,blue)-nya, karena tiap warna sebenernya adalah campuran dari unsur warna red, green dan blue dengan nilai antara hex 00 mpe hex FF. Misalnya untuk warna dengan value hex 23FFAC (gw ga tau ini warna apaan, ngasal ajah), maka value dari unsur: - R = 23 - G = FF - B = AC (inget ini masih dalam bilangan heksa, bukan desimal). Nah, kalo ke tingkat lebih rendah lagi, kita bisa convert masing2 nilai unsur warna ini ke dalam bilangan biner. Nha, karena masing2 unsur warna memiliki nilai antara 00 mpe FF, maka dalam biner angkanya menjadi antara 0000 0000 hingga 1111 1111. Dalam pikiran gw, gw pengen ambil dua digit terakhir dari nilai biner ini, trus gw ganti dengan digit bikinan gw sendiri. Jadi misalnya binary 1111 1111 pengen gw isi dengan value binary 00, sehingga nilainya ganti jadi binary 1111 1100 Tentu aja karena gw ngrubah nilai digit ini, value-nya juga jadi berubah. Yang tadinya 1111 1111 tu dalam hex adalah FF, maka 1111 1100 menjadi FC. Perubahan value ini tentu mempengaruhi warna yang dihasilkan. Karena itu gw cuman ambil dua digit, biar perubahan ini relatif kecil. Bisa aja 4 digit ato lebih yang dimodifikasi, tapi ya warnanya berubah jauh. Gambarnya jadi kaco dunk.. Buat apa si kita masukin angka dua digit segala? Ya, itulah kode yang ingin kita sembunyiin ke dalam gambarnya! Dengan sedikit perubahan warna (dikit kok!), kita bisa masukin kode yang kita mau! Ntar kode itu kita terjemahkan jadi huruf, angka, dan simbol macem2.. Tapi, tapi, kalo cuman dua digit, biner lagi, bukannya kombinasinya kecil? Dapetnya cuma 00, 01, 10, dan 11 kan? 4 kode bisa buat nyimpen apa? Hehe2.. inget2, modifikasi nilai biner tadi kan dalam SATU unsur warna kan? Yang binary 1111 1111 (hex FF) itu kan hanya nilai satu unsur warna, sedangkan total kita punya 3 unsur warna (R, G, B) di dalam satu pixel. Jadi.. gw akan merubah nilai dua digit biner terakhir dari TIAP unsur! Nilai-nilai dua digit biner ini kan kalo digabung bisa jadi 6 digit total, atau maksimumnya dalam biner adalah 11 11 11. Ini berarti kombinasinya ga 4 lagi, tapi 64~! (coba deh, 111111 biner = 64 desimal). Gw pikir si 64 cukup tuh: - angka 0 - 9 : 10 kode - alfabet : 26 kode total 36, masih sisa cukup banyak buat simbol2 dan laen2nya. Hanya kalo hurufnya ga bisa dibedain huruf gede ato huruf kecil, karena abis2in tempat dan kombinasinya kagak cukup :) Oke, jadi sekarang kita masuk proses encode ato decode dulu ni? Encode aja yak? Gw juga ga seberapa ngerti encode itu pengertiannya apaan, tapi dalam pikiran gw, ini proses di mana gw nyembunyiin satu karakter ke dalam satu pixel. Here's the magic: Pertama-tama, kita harus bikin tabel translasi dulu. Karena ada 64 kombinasi, kita tentukan dulu tiap angka ini berelasi dengan karakter apa, misalnya: 0..9 = angka 0 - 9 10 - 25 = alfabet a - z, dst. Terus, kita ambil nilai RGB dari pixel yang kita mau. Nilai RGB ini kita pecah jadi nilai R, G dan B. Pake contoh aja ya, biar kagak ribet: Misal kita pengen masukin karakter 'a'. Dari tabel translasi di atas, kode 'a' bernilai 10. Ini desimal, nilai binarynya adalah 1010. Terus, karena kita bisa nyimpen 6 digit binary ke dalam satu pixel, maka kita tambahin aja depannya pake 00, hasil akhirnya 001010 (nilainya tetep 10 desimal, ga berubah). Pokoknya biar gampang, kita bikin total digitnya 6. Abis gitu, kita pecah nilai tadi menjadi tiga, karena kita pengen masukin ke dalam tiga unsur warna yang berbeda. Mecahnya dari depan aja biasa, jadi kita dapet 00, 10, dan 10. (proses mecahnya ini algoritmanya gw sempet ruwet sendiri, dan males juga jelasinnya di sini. kalo mau tau tanya aja ye :p) Udah deh, nilai 00 kita masukkan ke digit terakhir nilai R, trus 10 yang pertama ke digit terakhir dari G, dan 10 terakhir ke digit terakhirnya B. Kesimpen deh karakter rahasianya. Ya gitu aja encodingnya, gampang. Terus, untuk membantu program decodernya nanti untuk mbedain apakah file gambar yang dia baca ada message rahasianya ato gak, kita kasih aja kode untuk awalan pesan dan akhiran pesan. Kasih aja karakter yang aneh apa gitu, yang ga keliatan di keyboard. Udah beres, untuk proses dekodingnya juga sederhana. Kita ambil satu pixel, kita pecah jadi tiga, kita ambil dua digit terakhir dari biner masing2 nilai warna, trus dua digit ini disambung2 lagi. Hasil sambungannya dicocokin ama tabel translasi, jadinya karakter apa. Udah selese :D Ecek2 juga yak ternyata? he2, gw ga sanggup mikir algo yang macem2. Terus lagi, problem gw sekarang adalah gw baru bisa nyimpen ke dalam format gambar BMP, dan tau kan kalo format BMP tu gedenya ga tanggung2. Pengen bisa juga support untuk JPEG, GIF, PNG dan laen2nya itu, tapi ya.. tunggu ntar deh kalo jalan :p Oh iya, dan batasan laen yang gw dapet adalah ini. Karena kita nyimpen satu karakter ke dalam satu pixel, otomatis kita dapet jumlah karakter maksimum yang bisa kita sembunyiin ke dalam satu gambar sebesar (panjang x lebar) gambar tersebut. Kalo lebih dari itu ya ga bisa dunk.. kurang banyak pixelnya.. Hm.. panjang banget ye postingnya. Mana ruwet gini lagih. Ya, moga2 bisa bantu2 orang lah. Niat aslinya si malah buat bantu2 gw sendiri soalnya gw gampang lupa kalo urusan gini.. sayang ntar idenya ilang. he2 Oke, smell y'all later :D
posted@8:08 PM

Comments & Discussion

»Anonymous Anonymous

Great site lots of usefull infomation here.
»

8:17 PM 
»Anonymous Anonymous

mas wong jawa ya
aku mampir karo salam kenal hehehe!

4:40 PM 
»Anonymous Anonymous

hei

4:43 PM 
Post a Comment