xanonymx Skrevet 16. august 2006 Skrevet 16. august 2006 Er ikke helt sikker om dette skal være under programvare eller noe med bilde. En film som jeg så på tv for ikke så lenge siden, viste de at de skjulte beskjeder i bilder, noe som jeg tror kalles steganografi. Jeg har søkt rundt på google, men lurer på om det er noen som litt peiling på dette og kunne ha prøvd å forklart meg på en enkelt og grei måte hvordan man gjør det. Altså hva jeg må gjøre for å legge inn en beskjed i et bilde og klare å lese beskjeden igjen.
JFTech Skrevet 21. august 2006 Skrevet 21. august 2006 Er ikke helt sikker om dette skal være under programvare eller noe med bilde.En film som jeg så på tv for ikke så lenge siden, viste de at de skjulte beskjeder i bilder, noe som jeg tror kalles steganografi. Jeg har søkt rundt på google, men lurer på om det er noen som litt peiling på dette og kunne ha prøvd å forklart meg på en enkelt og grei måte hvordan man gjør det. Altså hva jeg må gjøre for å legge inn en beskjed i et bilde og klare å lese beskjeden igjen. 6687371[/snapback] I denne filmen: Along Came a Spider?
JohndoeMAKT Skrevet 21. august 2006 Skrevet 21. august 2006 Har du lest forklaringen på Wikipedia? http://en.wikipedia.org/wiki/Steganography
backup Skrevet 22. august 2006 Skrevet 22. august 2006 (endret) Her er en veldig enkel oppskrift (jpg-filer): Med for eksempel et vbs-script, les bildefila (jpg-fil) inn i et bit-array. Krypter den hemmelige meldinga, og legg foran meldinga et unikt kjenntegn som f.eks. (#%¤?a\x). Legg så dette (kjenntegn + meldinga) til bit-arrayet som inneholder bildefila og lagre bit-arrayet som en ny bildefil som f.eks. bilde_stegan.jpg. Med for eksempel et vbs-script, for å se den hemmelige melding, les bilde_stegan.jpg inn i et bit-array. Join så arrayet til en streng, og søk deretter kjennetegnets (#%¤?a\x) posisjon. Fra denne posisjon + kjenntegnets lengde +1, les resten av strengen og du har den krypterte meldinga. Dekrypter denne, og du kan lese meldinga. Snarveier til dem to scripta kan man så legge inn i SendTo mappa slik at man kan bruke dem ved å høyreklikke dem aktuelle jpg-bildefilene. Endret 22. august 2006 av backup
xanonymx Skrevet 22. august 2006 Forfatter Skrevet 22. august 2006 Ja, det var den filmen. Har lest litt på Wiki, men det er på engelsk og jeg orker ikke å lese så mye på engelsk er ikke så god på det. Det var egentlig derfor jeg spurtet her for at jeg skulle slippe å lese mange sider på engelsk, og eventuelt andre som også vil lære dette. Den oppskriften til Backup hørtes forsåvidt enkelt ut men, så har ikke jeg så veldig god greie på programmering, har bare hvert borti helt smått. Men jeg vett ikke hva et bit-array er. Men trenger man å lage en kryptering på meldingen med tegn, kan man ikke bare skjule det i bilde? Jeg tror jeg vil starte på det enkleste og så bygge videre på dette. Takk for at dere bringet denne tråden opp igjen slik at denne kan fortsette litt til.
JohndoeMAKT Skrevet 22. august 2006 Skrevet 22. august 2006 (endret) Jeg har ikke innsikt i hvordan JPG-strukturen er, men hva backup forklarer tror jeg ikke vil fungere så bra... altså det blir nok synlige artifacts med mindre det er veldig lite data du prøver å skjule. Steganografi er det å gjemme en melding slik at det ikke er åpenlyst at det er en melding der og det er bare fantasien som hindrer metoder, og det samme gjelder til en viss grad i dataverdenen. Du nevner spesifikt digitale bilder og jeg skal prøve å forklare så godt som mulig en metode å gjøre dette, selv om det i teoretisk finnes tusenvis at metoder. Først: "Men trenger man å lage en kryptering på meldingen med tegn, kan man ikke bare skjule det i bilde?" Nei, du trenger ikke kryptere meldingen, men det vil gi en ekstra sikkerhet dersom den stenografiske metoden blir oppdaget. En enkel metode å lagre data i bilder uten mye synlige artifacts: Et 24 bit bitmap består av tre 8 bit verdier som hver representerer rød, grønn og blå for hver pixel. En pixel kan derfor ha verdien 11100001001111011010010 som står for 112 rød, 158 grønn og 210 blå. Men siden 24 bit fargedybde gir 16'777'215 forskjellige farger som gir en hel del farger som er ganske like kan du endre litt på fargeneverdiene ved å endre litt av dataene til beskjeden din uten merkbar visuell endring i bildet. I eksempelet over er RGB-verdiene 1110000 10011110 11010010 hvor tallet lengst til venstre er det viktigeste mens det lengst til høyre er det minst viktige. (Det betyr at en endring av et bit til høyre har mindre utfall på rekkens verdi som igjen betyr liten forskjell mellom de to fargeverdiene du får) Som et eksempel på dette har jeg laget en pizza med åtte forskjellige farger. Fargene er fra klokken 12: 112-158-210 113-158-210 112-159-210 112-158-211 113-159-210 113-158-211 112-159-211 113-159-211 altså de åtte forskjellige kombinasjonene du får kun ved å endre siste bit i de tre RGB-verdiene: Som du sikkert ser (eller ikke ser ) er det veldig liten variasjon i de åtte fargene som dermed i praksis betyr at du kan rett og slett ha valgt hvilken som helst av de uten at noen vil kunne se forskjell fra orginalen med øyet. Du kan derfor velge en farge som sier en liten del av beskjeden din uten at det merkes. Dersom du i et 24 bit bitmap bruker den minst betydelige bitten i hver farge til å representere et bit i et ASCII-tegn betyr det at du kan "gjemme" tre tegn per åtte pixler i bildet. Igjen et eksempel på dette: Jeg vil gjemme bokstaven "k" som i ASCII er : 01101011 Dette er åtte bit som betyr at jeg trenger tre pixler av tre bit (ni totalt) for å gjemme det: Her står det "k" to ganger. Det første er : 112-159-211, 112-159-210, 113-159-210 eller binært: 1110000 10011111 11010011, 1110000 10011111 11010010, 1110001 10011111 11010010 Og den andre rekken er : 254-255-1, 0-255-64, 255-1-128 eller binært: 11111110-11111111-00000001, 00000000-11111111-1000000, 11111111-00000001-10000000 Som du ser av de markerte sifferene betyr det at dersom du leser den siste bitten i de åtte første åttebit blokkene får du ASCII "k". (01101011) I et bitmap på en million mixler (en megapixel, ~1160x870 pixler i 4/3) kan du altså gjemme omtrent 375'000 ASCII-tegn. Med omtrent 100 tegn på en linje og 50 linjer på en side betyr det at du kan minst gjemme 75 sider tekst i et slikt bilde trolig uten synlige artifacts fra orginalen. (Minst fordi en blank linje eller en linje som ikke går hele veien bruker kun et eller to tegn på å avsluttes) ..Men hvordan komprimerte bilder kommer inn i dette har jeg ikke peiling. Endret 22. august 2006 av JohndoeMAKT
xanonymx Skrevet 22. august 2006 Forfatter Skrevet 22. august 2006 Tusen takk for forklaring, nå ble jeg god del klokere på oppbyggingen. Men for å finne/legge inn meldingen er jeg da nødt til å sjekke hver piksel, eller er det det jeg skal lage et script for å gjøre?
Peter Skrevet 22. august 2006 Skrevet 22. august 2006 Det lager du selvsagt et skript for. Komprimering vil ødelegge melding om jeg husker riktig fra forelesningene.
xanonymx Skrevet 22. august 2006 Forfatter Skrevet 22. august 2006 Siden jeg ikke er noe spesielt god i å programmer så lurtet jeg på om noen kunne ha forklart meg hvordan jeg gjøre det? Og kan jeg lage scriptet i Microsoft Visual Basic 2005 Express Edition?
ilpostino Skrevet 22. august 2006 Skrevet 22. august 2006 Camouflage er et program som gjør at du skal kunne skjule en fil inni en annen fil.. jeg er sikker på at det finnes mange tilsvarende programmer også..
backup Skrevet 23. august 2006 Skrevet 23. august 2006 (endret) JohndoeMAKT: flott forklaring, ga meg en interessant programmeringsoppgave med vb 2005. Takker så mye! Oppskrifta jeg ga egner seg bare for korte meldinger som må krypteres, fordi ellers så kan man se dem ved å ta jpg-fila inn i en hex-editor! Endret 23. august 2006 av backup
xanonymx Skrevet 23. august 2006 Forfatter Skrevet 23. august 2006 Jeg prøvd programmet Camouflage og det funket bra, men jeg har lyst å å prøve å lage et eget. Så hvis noen kunne forklart meg litt hvordan jeg gjør det så hadde det hvert fint. Og backup, hvis du programmerer dette kan jeg få se progammeringskodene da (for å lære)?
JohndoeMAKT Skrevet 2. september 2006 Skrevet 2. september 2006 (endret) Dersom du fortsatt ønsker en enkel beskrivelse av måten jeg har skrevet lengre opp kommer den her. OBS, det finnes muligens biblioteker og annet som kan gjøre ting lettere for deg, men her forklarer jeg på rent bitnivå: Les inn byte 0-1. Disse skal være to ASCII-tegn "BM". Les byte 18-21 og 22-25, dette er bildets bredde og høyde i pixler. Bytene ligger i "feil" rekkefølge, men bittene i hver byte ligger rett, så du må sortere de slik at byte 4 kommer først, så 3 så 2 og så 1 når du skal oversette til desimal. I byte 28 ligger bildets fargedybde, så det kan godt være greit og se at den er 24 bit, som jeg forklarer for. I BMP blir pixeldata lagret fra byte 54 og består av tre RGB-byte for hver pixel fra nedre venstre hjørnet av bildet og mot høyre på linja, som i seg selv ikke er interessant bortsett fra at antall byte på en linje må kunne deles på 4, ellers blir resten fylt ut med nuller. I nullene kan du ikke lagre data for i en komprimering/dekomprimering blir disse oversett. (4 - (bredde * 3) % 4) = hvor mange tomme bytes du må hoppe over. Og da har du alt du trenger, bortsett fra at det er greit å vite hvor lang meldingen din er slik at du vet når du skal slutte å lese melding og når uviktige data begynner. For å løse dette bør de første bittene du skriver være en forklaring på hvor mange byte beskjeden består av. Denne headeren må være av fast størrelse og hvor lang du trenger bestemmer du selv. 10-12 bit er nok for det meste av selvskrevet data, men du trenger muligens mer dersom du skal lagre andre typer data. To headers hvor en er statisk og en er dynamisk kan nok være den beste løsningen. Skriv først de første 54 byte direkte til den nye fila. Skriv så 7 bit fra den orginale fila og 1 bit fra din header og melding (bredde * 3) ganger og skriv så direkte fra orginalfila 8 bit (4 - ((bredde * 3) % 4)) ganger. og gjør dette så lenge det er mer melding å skrive. Når du er ferdig å skrive meldingen skriver du resten av fila direkte. Presto, ferdig. EDIT: Det kan også være greit å kontrollere at du har plass nok til å lagre meldingen. Meldingen blir (meldingsbit + headerbit) stor og krever "Math.ceil"((meldingsbit + headerbit) / 3)) pixler for å lagre dette. Antall pixler du har tilgjengelig finner du selvsagt ved å gange bredde med høyde. Endret 2. september 2006 av JohndoeMAKT
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå