Sisällysluettelo:
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Haasteesi, rakas lukija, on selvittää, mikä viesti on piilotettu output-p.webp
Nämä kaksi kuvaa näyttävät identtisiltä, mutta ne eivät ole Nämä ovat greenman.png- ja output-p.webp
Tämä ohje on inspiroitu upeasta YouTube -videosta. Kun katsoimme tämän videon myöhään illalla yhden päivän ja kamppailimme ajatellaksesi viileää luentoa ja välitestiä edistyneelle Java -ohjelmointikurssille, tämä projekti syntyi. Yllä olevat kuvat sekä tässä ohjeessa kuvattu koodi ovat ilmaisia Githubissa.
Tarvikkeet
Tarvitset tietokoneen ja sinun on tiedettävä, miten Java -ohjelma käännetään ja ajetaan. Tämä ohjelma on vain kaksi lyhyttä tiedostoa ja sinun on suoritettava se komentoriviltä.
Vaihe 1: Mikä on steganografia
Sinun pitäisi katsoa edellisessä vaiheessa linkittämäni YouTube -video, mutta tässä on yhteenveto:
Jos sinun täytyy piilottaa salainen viesti ystävällesi, hieno tapa tehdä se on Steganography. Kuvan Steganografian idea on yksinkertainen; Tietokonekuvat koostuvat pikseleistä, ja jokainen pikseli on punaisen, vihreän ja sinisen yhdistelmä. Monissa tietokoneiden kuvamuotoissa punaisen, vihreän ja sinisen määrä kussakin pikselissä ilmaistaan arvoina 0-127. Esimerkiksi hyvin punaisen pikselin punainen arvo on 127 ja vihreä ja sininen nolla. Temppu on seuraava: punaista voimakkuutta 126 ei voi erottaa punaisesta intensiteetistä 127 (ihmissilmälle). Ja niin piilottamalla plus tai miinus yksi jokaisessa punaisessa pikselissä voimme piilottaa bitit pikseleinä. Jos löydämme ovelan tavan kerätä bitit takaisin ylös, voimme noutaa tiedot, jotka olemme hiipineet kuvaan!
Ole luova! Steganografia voidaan tehdä millä tahansa digitaalisella medialla! Voit pelata esimerkiksi musiikki- tai videotiedostojen bitteillä, mutta tämä edellyttää, että lähdet tekemään enemmän tutkimusta tämän ohjeen soveltamisalan ulkopuolella.
Vaihe 2: Kuinka teksti koodataan tietokoneissa
Seuraavat asiat saattavat edellyttää tutkinnon suorittamista CS: ssä tai paljon harrastajien intohimoa ymmärtääkseen. Tietokoneet tallentavat tiedot bitteinä 1s ja 0s. Nämä 1: t ja 0: t on tyypillisesti ryhmitelty 8: n ryhmiksi ja niitä kutsutaan "tavuiksi". Kuten täällä ja täällä on selitetty, on muutamia tapoja, joilla voimme käskeä tietokoneen tulkitsemaan tavuja tekstinä. Jotta saat kaiken irti tästä steganografian luennosta/opetettavasta, sinun on ymmärrettävä enemmän tai vähemmän ASCII ja UTF8. Nämä ovat kaksi yleistä tapaa koodata kielitiedot tavusarjoihin.
Kun sinulla on käsitys tästä aiheesta, ymmärrät tämän: ASCII: ssä ja UTF8: ssa sanaa "edustavat" seuraavat tavut (heksadesimaaleina) 0x74 0x68 0x65. Binaarimuodossa nämä tavut ovat: 01110100b 01101000b 01101101b
Lisäksi ymmärrät, että UTF8: ssa Grinning Face Emoji edustaa seuraavia tavuja (heksadesimaaleina) 0xF0 0x9F 0x98 0x80. Binäärinä nämä tavut ovat 11110000b 10011111b 10011000b 10000000b.
Joka tapauksessa näet liitteenä olevassa kuvakaappauksessa, että tietokoneeni tekee jotain näiden tavujen kanssa. Olen korostanut ne ohjelman tuotoksessa nuolilla ja suurella "LOOK!".
Vaihe 3: Kuinka ohjelma toimii
Ohjelman kääntäminen githubista on helppoa. Näet repun etusivulla täällä ja silloin
Ohjelma suoritetaan näin komentoriviltä: java Main input-p.webp
oheisista esimerkeistä näet, että olen suorittanut java Main greenman-p.webp
Teet saman asian.
Jos katsot Main.javaa, näet, että näin tapahtuu:
- Ohjelma lukee kuvan 2D -matriisiksi
- Ohjelma muuttaa lähettämäsi viestin tavutaulukkoksi (tavu )
- Ohjelma käyttää sitten MessageHider -luokkaa piilottaakseen kuvaryhmän viestitavu.
- Ohjelma kirjoittaa sitten kuvan 2d -taulukon tiedostoon (output.png), jonka sisällä on piilotetut tiedot. Jos katsot tätä kuvaa, sitä ei voi erottaa alkuperäisestä
- Ohjelma lukee output.png: n uuteen 2D -matriisiin ja käyttää extractMessage () -funktiota poistaakseen viimeisen bitin niin monesta tavusta kuin pyydät. Nämä bitit tulostetaan näytölle 8s: n ryhmissä, joten näet binäärisen esityksen siitä, mitä tietoja on piilotettu.
Koodi toimii siis odotetusti.
Vaihe 4: Johtopäätös
Joten olen antanut sinulle jonkin toimivan koodin, todisteen siitä, että se toimii kuvan muodossa, ja joitakin luentomuistiinpanoja, jotka annan yliopisto -opiskelijoilleni. Annoin sinulle myös haasteen! Vietin muutaman tunnin koodin kirjoittamiseen ja luentomuistiinpanojen valmisteluun, joten olen pahoillani, että tässä ohjeessa ei ole paljon kuvia. Jos steganografia on mielestäsi mielenkiintoista, ota haaste vastaan!