Menu Tutup

Cara Menyembunyikan Data dalam Gambar Menggunakan Python

Steganografi adalah seni menyembunyikan data rahasia dalam file apa pun.

Data rahasia dapat berupa data format apa pun seperti teks atau bahkan file. Singkatnya, motif utama steganografi adalah untuk menyembunyikan informasi yang dimaksud dalam file apa pun, biasanya gambar, audio, atau video, tanpa benar-benar mengubah penampilan eksternal file, mis. Itu harus terlihat sama seperti sebelumnya.

Di blog ini, kita akan fokus pada belajar steganografi berbasis gambar, yaitu menyembunyikan data rahasia dalam suatu gambar.

Tetapi sebelum menyelam sedikit lebih dalam ke dalamnya, mari kita lihat apa yang terdiri dari gambar.

  1. Piksel adalah blok penyusun gambar.
  2. Setiap piksel mengandung tiga nilai: (merah, hijau, biru) juga dikenal sebagai nilai RGB.
  3. Setiap nilai RGB berkisar dari 0 hingga 255.
    Informasi sebanyak ini sudah cukup untuk memulai.

Sekarang, mari kita lihat bagaimana kita dapat menyandikan dan mendekode data ke dalam gambar kita.

Encoding

Ada banyak algoritma yang dapat digunakan untuk menyandikan data ke dalam gambar, dan pada kenyataannya, Anda juga dapat membuatnya sendiri. Yang digunakan di blog ini juga mudah dipahami dan diimplementasikan.

Algoritma adalah sebagai berikut:

  1. Untuk setiap karakter dalam data, nilai ASCII diambil dan dikonversi menjadi biner 8-bit [1].
    Tiga piksel dibaca sekaligus dengan total 3 * 3 = 9 nilai RGB. Delapan nilai RGB pertama digunakan untuk menyimpan satu karakter yang dikonversi menjadi biner 8-bit.
  2. Nilai RGB dan data biner yang sesuai dibandingkan. Jika digit biner adalah 1 maka nilai RGB dikonversi menjadi ganjil dan, sebaliknya, genap.
  3. Nilai kesembilan menentukan apakah lebih banyak piksel harus dibaca atau tidak. Jika ada lebih banyak data untuk dibaca, mis.
  4. Disandikan atau didekodekan, maka piksel kesembilan berubah menjadi genap. Kalau tidak, jika kita ingin berhenti membaca piksel lebih jauh, maka jadikan itu aneh.
BACA JUGA  8 Cara Hack Instagram Online 100% Work untuk Hack Akun IG

Ulangi proses ini sampai semua data dikodekan ke dalam gambar.

Contoh

Misalkan pesan yang disembunyikan adalah ‘Hii’.

Pesannya terdiri dari tiga byte, oleh karena itu, piksel yang diperlukan untuk menyandikan data adalah 3 x 3 = 9. Pertimbangkan gambar 4 x 3 dengan total 12 piksel, yang cukup untuk menyandikan data yang diberikan.

[(27, 64, 164), (248, 244, 194), (174, 246, 250), (149, 95, 232),
(188, 156, 169), (71, 167, 127), (132, 173, 97), (113, 69, 206),
(255, 29, 213), (53, 153, 220), (246, 225, 229), (142, 82, 175)]

Langkah 1: Nilai ASCII dari H adalah 72, yang setara binernya adalah 01001000.

Langkah 2: Baca tiga piksel pertama.

(27, 64, 164), (248, 244, 194), (174, 246, 250)

Langkah 3: Sekarang, ubah nilai piksel menjadi ganjil untuk 1 dan bahkan untuk 0 seperti dalam data biner setara.

Misalnya, digit biner pertama adalah 0 dan nilai RGB pertama adalah 27, perlu dikonversi ke ganjil, yang menyiratkan 26.

Demikian pula, 64gets dikonversi ke 63 karena angka biner berikutnya adalah 1 sehingga nilai RGB harus dibuat ganjil.

Jadi, piksel yang dimodifikasi adalah:

(26, 63, 164), (248, 243, 194), (174, 246, 250)

Langkah 4: Karena kita harus menyandikan lebih banyak data, nilai terakhir harus genap. Demikian pula, saya dapat dikodekan dalam gambar ini.

BACA JUGA  Cara mengetahui Siapa yang Berhenti Mengikuti Instagram (Un follow IG)

Saat membuat nilai piksel aneh / genap dengan melakukan +1 atau -1, Anda harus menjaga kondisi biner. Yaitu, nilai piksel harus lebih dari atau sama dengan 0 dan kurang dari atau sama dengan 255.

Gambar baru akan terlihat seperti:

[(26, 63, 164), (248, 243, 194), (174, 246, 250), (148, 95, 231),
(188, 155, 168), (70, 167, 126), (132, 173, 97), (112, 69, 206),
(254, 29, 213), (53, 153, 220), (246, 225, 229), (142, 82, 175)]

Decoding

Untuk decoding, kami akan mencoba menemukan cara membalikkan algoritma sebelumnya yang kami gunakan untuk menyandikan data.

  1. Sekali lagi, tiga piksel dibaca sekaligus. 8 nilai RGB pertama memberi kita informasi tentang data rahasia, dan nilai kesembilan memberitahu kita apakah akan maju atau tidak.
  2. Untuk delapan nilai pertama, jika nilainya ganjil, maka bit biner adalah 1, jika tidak maka itu adalah 0.
  3. Bit digabungkan ke string, dan dengan setiap tiga piksel, kami mendapatkan satu byte data rahasia, yang berarti satu karakter.
  4. Sekarang, jika nilai kesembilan genap maka kita terus membaca piksel tiga sekaligus, atau kita berhenti.

Sebagai contoh

Mari kita mulai membaca tiga piksel sekaligus.
Pertimbangkan gambar kami yang sebelumnya disandikan.

[(26, 63, 164), (248, 243, 194), (174, 246, 250), (148, 95, 231),
(188, 155, 168), (70, 167, 126), (132, 173, 97), (112, 69, 206),
(254, 29, 213), (53, 153, 220), (246, 225, 229), (142, 82, 175)]

Langkah 1: Kami pertama kali membaca tiga piksel:

[(26, 63, 164), (248, 243, 194), (174, 246, 250)

Langkah 2: Membaca nilai pertama: 26, yang genap, oleh karena itu bit biner adalah 0. Demikian pula, untuk 63, bit biner adalah 1 dan untuk 164 itu adalah 0. Proses ini berlanjut hingga delapan nilai RGB.

BACA JUGA  Cara Lacak Lokasi HP Pacar menggunakan Seeker

Langkah 3: Kami akhirnya mendapatkan nilai biner: 01001000 setelah menggabungkan semua nilai biner individu. Data biner akhir sesuai dengan nilai desimal 72, dan dalam ASCII, itu mewakili karakter H.

Langkah 4: Karena nilai kesembilan genap, kami mengulangi langkah-langkah di atas. Kami berhenti ketika nilai kesembilan yang ditemui aneh.

Akibatnya, kami mendapatkan kembali pesan asli kami yang sebelumnya Hii.

Anda bisa download repositorinya dari github:

https://gist.github.com/goelashwin36/6847a974c9b7b2ca500154d5c89d1d76

Modul yang digunakan dalam program ini adalah PIL yang merupakan kependekan dari Python Imaging Library. Ini memberi kita kemampuan untuk melakukan operasi pada gambar dengan Python.

Program Execution

Data ecode
Data decode

Input image

medium.png

Output image

newImage.png

Keterbatasan

Program ini mungkin tidak berfungsi seperti yang diharapkan dengan gambar JPEG karena JPEG menggunakan kompresi lossy yang berarti bahwa piksel dimodifikasi untuk mengompres gambar dan mengurangi kualitas, oleh karena itu kehilangan data terjadi.

 

Tinggalkan Balasan