Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Din utfordring, kjære leser, er å finne ut hvilket budskap som er skjult i output-p.webp
De to bildene her ser identiske ut, men de er ikke Dette er greenman.png- og output-p.webp
Denne instruksen er inspirert av en flott youtube -video. Etter å ha sett denne videoen sent på kvelden en dag og slitt med å tenke på en kul foredrag og midtveiseksamen for en avansert Java -programmeringstime, ble dette prosjektet født. Bildene ovenfor, sammen med koden beskrevet i denne instruksjonsboken, er gratis på Github.
Rekvisita
Du trenger en datamaskin, og du må vite hvordan du kompilerer og kjører et Java -program. Dette programmet er bare to korte filer, og du må kjøre det på kommandolinjen.
Trinn 1: Hva er Steganography
Du bør se YouTube -videoen jeg lenket til i forrige trinn, men her er sammendraget:
Hvis du trenger å skjule en hemmelig melding til en venn, er det en kul måte å gjøre det på med Steganography. Ideen om image Steganography er enkel; datamaskinbilder er laget av piksler, og hver piksel er en kombinasjon av rødt, grønt og blått. I mange datamaskinformat er mengdene rødt, grønt og blått i hver piksel uttrykt som verdier fra 0-127. Så for eksempel vil en veldig rød piksel ha en rød verdi på 127 og grønne og blå verdier på null. Trikset er dette: en rød intensitet på 126 kan ikke skilles fra en rød intensitet på 127 (til et menneskelig øye). Og så ved å fikle med pluss eller minus en i hver rød piksel, kan vi skjule biter i piksler. Hvis vi finner en lurig måte å samle bitene på igjen, kan vi hente dataene vi snek inn i bildet!
Vær kreativ! Steganografi kan gjøres med alle digitale medier! Du kan for eksempel spille med biter i musikk- eller videofiler, men det krever at du må gjøre mer forskning utenfor omfanget av denne instruerbare.
Trinn 2: Hvordan tekst er kodet på datamaskiner
Det som følger her kan kreve en grad i CS eller mye hobbyist lidenskap for å forstå. Datamaskiner lagrer data i biter som 1s og 0s. Disse 1 -ene og 0 -ene er vanligvis gruppert i grupper på 8 og referert til som "byte". Som forklart her og her er det få måter vi kan fortelle en datamaskin å tolke byte som tekst. For å få mest mulig ut av denne steganografiforelesningen/instruerbare må du mer eller mindre forstå ASCII og UTF8. Dette er to vanlige måter å kode språkdata i en serie byte.
Når du har en ide om dette emnet, forstår du dette: I ASCII og UTF8 er ordet "the" representert med følgende byte (i hex) 0x74 0x68 0x65. I binær er disse byte: 01110100b 01101000b 01101101b
Videre vil du forstå at i UTF8 er en Grinning Face Emoji representert med følgende byte (i hex) 0xF0 0x9F 0x98 0x80. I binær er disse byte 11110000b 10011111b 10011000b 10000000b.
Uansett vil du se på det vedlagte skjermbildet at datamaskinen min gjør noe med disse byte. Jeg har markert dem i programutgangen med piler og en stor "LOOK!".
Trinn 3: Hvordan programmet fungerer
Å kompilere programmet fra github er enkelt. Få repoen vist på forsiden her og da
Programmet kjøres slik fra kommandolinjen: java Main input-p.webp
i de vedlagte eksemplene ser du at jeg har kjørt java Main greenman-p.webp
Du vil gjøre det samme.
Hvis du ser på Main.java vil du se at dette er det som skjer:
- Programmet leser bildet inn i et 2D -array
- Programmet gjør meldingen du leverte til en byte -matrise (byte )
- Programmet bruker deretter en MessageHider -klasse for å skjule meldingsbytes i bildearrayet.
- Programmet skriver deretter bilde 2d -arrayet ut til en fil (output.png) med de skjulte dataene inne. Hvis du ser på dette bildet, kan det ikke skilles fra originalen
- Programmet leser deretter output-p.webp" />
Så stort sett fungerer koden som vi forventer.
Trinn 4: Konklusjon
Så jeg har gitt deg en arbeidskode, et bevis på at den fungerer i form av et bilde, og noen forelesningsnotater jeg gir til universitetsstudentene mine. Jeg ga deg også en utfordring! Jeg brukte noen timer på å skrive koden og forberede forelesningsnotater, så jeg beklager at denne instruksen ikke har mange bilder. Hvis du synes steganografi er interessant, kan du godta min utfordring!