Cuprins:

Acest PNG este un compartiment secret: 4 pași
Acest PNG este un compartiment secret: 4 pași

Video: Acest PNG este un compartiment secret: 4 pași

Video: Acest PNG este un compartiment secret: 4 pași
Video: Cum scrii când începi un caiet nou 2024, Noiembrie
Anonim
Acest este un compartiment secret
Acest este un compartiment secret
Acest este un compartiment secret
Acest este un compartiment secret

Provocarea ta, dragă cititoare, este să-ți dai seama ce mesaj este ascuns în imaginea output-p.webp

Cele două imagini de aici arată identice, dar nu sunt. Acestea sunt imaginile greenman-p.webp

Acest instructable este inspirat de un videoclip grozav pe YouTube. După ce am vizionat acest videoclip noaptea târziu într-o zi și m-am străduit să ne gândim la o prelegere interesantă și la un examen intermediar pentru o clasă avansată de programare Java, s-a născut acest proiect. Imaginile de mai sus, împreună cu codul descris în acest instructable, sunt gratuite pe Github.

Provizii

Veți avea nevoie de un computer și va trebui să știți cum să compilați și să rulați un program Java. Acest program este doar două fișiere scurte și va trebui să îl rulați pe linia de comandă.

Pasul 1: Ce este Steganografia

Ar trebui să urmăriți videoclipul pe YouTube pe care l-am legat în pasul anterior, dar iată rezumatul:

Dacă trebuie să ascundeți un mesaj secret către un prieten, un mod interesant de a face acest lucru este cu Steganography. Ideea Steganografiei de imagine este simplă; imaginile computerizate sunt realizate din pixeli, iar fiecare pixel este o combinație de roșu, verde și albastru. În multe formate de imagini de computer, cantitățile de roșu, verde și albastru din fiecare pixel sunt exprimate ca valori de la 0 la 127. De exemplu, un pixel foarte roșu ar avea o valoare roșie de 127 și valori verde și albastru de zero. Trucul este următorul: o intensitate roșie de 126 nu poate fi distinsă de o intensitate roșie de 127 (pentru un ochi uman). Și astfel, jucând cu plus sau minus unul în fiecare pixel roșu, putem ascunde biți în pixeli. Dacă găsim o modalitate subtilă de a aduna biții înapoi, putem prelua datele pe care le-am strecurat în imagine!

Fii creativ! Steganografia se poate face cu orice suport digital! Puteți juca cu biți în muzică sau fișiere video, de exemplu, dar acest lucru vă cere să mergeți să faceți mai multe cercetări în afara sferei acestui instructable.

Pasul 2: Cum este codat textul pe computere

Cum este codat textul pe computere
Cum este codat textul pe computere

Ceea ce urmează aici ar putea necesita o diplomă în CS sau o mulțime de pasiune hobbyistă pentru a înțelege. Calculatoarele stochează date în biți ca 1s și 0s. Aceste 1 și 0 sunt grupate în mod obișnuit în ciorchini de 8 și denumite „octeți”. După cum s-a explicat aici și aici, există câteva modalități prin care putem spune unui computer să interpreteze octeții ca text. Pentru a profita la maximum de această prelegere / instruire de steganografie, trebuie să înțelegeți mai mult sau mai puțin ASCII și UTF8. Acestea sunt două moduri comune de codificare a datelor lingvistice într-o serie de octeți.

După ce ați făcut o idee despre acest subiect, veți înțelege acest lucru: în ASCII și UTF8 cuvântul „the” este reprezentat de următorii octeți (în hex) 0x74 0x68 0x65. În binar, acești octeți sunt: 01110100b 01101000b 01101101b

Mai mult, veți înțelege că în UTF8 un Emoji cu față rânjitoare este reprezentat de următorii octeți (în hex) 0xF0 0x9F 0x98 0x80. În binar, acești octeți sunt 11110000b 10011111b 10011000b 10000000b.

În orice caz, veți vedea în captura de ecran atașată că computerul meu face ceva cu acești octeți. Le-am evidențiat în ieșirea programului cu săgeți și un mare „UIT!”.

Pasul 3: Cum funcționează programul

Compilarea programului din github este ușoară. Obțineți repo afișat pe prima pagină aici și apoi

Programul este rulat astfel din linia de comandă: java Main input-p.webp

în exemplele atașate veți vedea că am rulat java Main greenman-p.webp

Vei face același lucru.

Dacă te uiți la Main.java, vei vedea că așa se întâmplă:

  1. Programul citește imaginea într-o matrice 2D
  2. Programul transformă mesajul pe care l-ați furnizat într-o matrice de octeți (octet )
  3. Programul folosește apoi o clasă MessageHider pentru a ascunde octeții mesajului în tabloul de imagini.
  4. Programul scrie apoi matricea 2d a imaginii într-un fișier (output.png) cu datele ascunse în interior. Dacă vă uitați la această imagine, aceasta nu se distinge de original
  5. Programul citește apoi output-p.webp" />

Deci, codul funcționează așa cum ne așteptăm.

Pasul 4: Concluzie

Așa că v-am dat un cod de lucru, dovada că funcționează sub forma unei imagini și câteva note de curs pe care le dau studenților mei universitari. Ți-am dat și eu o provocare! Am petrecut câteva ore scriind codul și pregătind note de curs, așa că îmi pare rău că acest instructiv nu are multe poze. Dacă credeți că steganografia este interesantă, vă rugăm să acceptați provocarea mea!

Recomandat: