Sadržaj:
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Vaš izazov, dragi čitatelju, je shvatiti koja je poruka skrivena u output-p.webp
Dvije slike ovdje izgledaju identično, ali nisu. Ovo su slike greenman-p.webp
Ova instrukcija inspirirana je sjajnim YouTube videom. Nakon što sam jednog dana kasno navečer pogledao ovaj video i borio se smišljajući cool predavanje i međuispit za napredni tečaj programiranja Java, ovaj je projekt rođen. Gore navedene slike, zajedno s kodom opisanim u ovom uputstvu, besplatne su na Githubu.
Pribor
Trebat će vam računalo i morat ćete znati sastaviti i pokrenuti Java program. Ovaj program je samo dvije kratke datoteke i morat ćete ga pokrenuti u naredbenom retku.
Korak 1: Što je steganografija
Trebali biste pogledati YouTube video koji sam povezao u prethodnom koraku, ali evo sažetka:
Ako trebate sakriti tajnu poruku prijatelju, super način za to je steganografija. Ideja slikovne steganografije je jednostavna; računalne slike izrađene su od piksela, a svaki piksel je kombinacija crvene, zelene i plave boje. U mnogim formatima računalnih slika količine crvene, zelene i plave boje u svakom pikselu izražene su kao vrijednosti od 0-127. Tako bi, na primjer, vrlo crveni piksel imao crvenu vrijednost 127, a zelenu i plavu vrijednost nulu. Trik je sljedeći: intenzitet crvene boje 126 ne razlikuje se od intenziteta crvene boje 127 (za ljudsko oko). I tako petljanjem s plus ili minus jedan u svakom crvenom pikselu možemo sakriti bitove u pikselima. Ako pronađemo lukav način prikupljanja bitova, možemo dohvatiti podatke koje smo zavukli u sliku!
Budi kreativan! Steganografija se može raditi s bilo kojim digitalnim medijem! Na primjer, možete se igrati s dijelovima glazbenih ili video datoteka, ali to zahtijeva da nastavite s istraživanjem izvan opsega ovog uputstva.
Korak 2: Kako se tekst kodira na računalima
Ono što slijedi ovdje može zahtijevati diplomu CS ili mnogo hobističke strasti za razumijevanje. Računala pohranjuju podatke u bitovima kao 1s i 0s. Ovi brojevi 1 i 0 obično su grupirani u grupe od 8 i nazivaju se "bajtovi". Kako je ovdje i ovdje objašnjeno, postoji nekoliko načina na koje računalu možemo reći da interpretira bajtove kao tekst. Da biste izvukli maksimum iz ovog steganografskog predavanja/instrukcija, morate manje -više razumjeti ASCII i UTF8. Ovo su dva uobičajena načina kodiranja jezičnih podataka u nizu bajtova.
Kad steknete ideju o ovoj temi, shvatit ćete ovo: U ASCII i UTF8 riječ "the" predstavljena je sljedećim bajtovima (u heksadecimalnom broju) 0x74 0x68 0x65. U binarnom obliku, ovi bajtovi su: 01110100b 01101000b 01101101b
Nadalje, shvatit ćete da je u UTF8 Emoji nasmiješenog lica predstavljen sljedećim bajtovima (u heksadecimalnoj vrijednosti) 0xF0 0x9F 0x98 0x80. U binarnom obliku ti su bajtovi 11110000b 10011111b 10011000b 10000000b.
U svakom slučaju ćete na priloženom snimku zaslona vidjeti da moje računalo radi nešto s tim bajtovima. Istaknuo sam ih u izlaznom programu strelicama i velikim "POGLEDAJ!".
Korak 3: Kako program funkcionira
Sastavljanje programa s githuba je jednostavno. Ovdje i tada preuzmite repo prikazan na naslovnici
Program se ovako pokreće iz naredbenog retka: java Main input-p.webp
u priloženim primjerima vidjet ćete da sam pokrenuo java Main greenman-p.webp
Učinit ćete istu stvar.
Ako pogledate Main.java, vidjet ćete da se to događa:
- Program čita sliku u 2D nizu
- Program pretvara poruku koju ste unijeli u niz bajtova (bajt )
- Program tada koristi klasu MessageHider za skrivanje bajtova poruka u nizu slika.
- Program tada zapisuje 2d niz slika u datoteku (output.png) sa skrivenim podacima. Ako pogledate ovu sliku, ona se ne razlikuje od originala
- Program tada čita output-p.webp" />
Dakle, kod prilično dobro funkcionira kako očekujemo.
Korak 4: Zaključak
Pa sam vam dao neki radni kod, dokaz da radi u obliku slike i neke bilješke s predavanja koje dajem svojim studentima. Dao sam vam i izazov! Proveo sam nekoliko sati pišući kôd i pripremajući bilješke s predavanja pa mi je žao što ovaj instruktor nema mnogo slika. Ako mislite da je steganografija zanimljiva, prihvatite moj izazov!