Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Vaším úkolem, drahý čtenáři, je zjistit, jaká zpráva se skrývá v obrázku output.png, který jsem pro vás vložil na github. Zde můžete použít kód MessageHider k extrahování zprávy. Pokud jste zmatení, napište prosím níže komentář a já vám pomůžu získat odpověď! Můžete dokonce přestat číst právě teď, prostě přejděte na github, získejte kód a začněte dělat steganografii. Dost bylo řečí, ale prosím vydržte a řeknu vám víc.
Dva obrázky zde vypadají shodně, ale nejsou. Jedná se o obrázky greenman-p.webp
Tento návod je inspirován skvělým videem na YouTube. Poté, co jsem se jednoho dne díval na toto video pozdě v noci a snažil jsem se vymyslet skvělou přednášku a zápočtovou zkoušku pro pokročilou třídu programování v Javě, se zrodil tento projekt. Výše uvedené obrázky spolu s kódem popsaným v tomto pokynu jsou na Githubu zdarma.
Zásoby
Budete potřebovat počítač a budete muset vědět, jak zkompilovat a spustit program Java. Tento program jsou jen dva krátké soubory a budete jej muset spustit na příkazovém řádku.
Krok 1: Co je to steganografie
Měli byste se podívat na video z YouTube, které jsem propojil v předchozím kroku, ale zde je shrnutí:
Pokud potřebujete skrýt tajnou zprávu příteli, skvělý způsob, jak to udělat, je Steganography. Myšlenka image Steganografie je jednoduchá; počítačové obrázky jsou tvořeny pixely a každý pixel je kombinací červené, zelené a modré. V mnoha formátech počítačových obrazů je množství červené, zelené a modré v každém pixelu vyjádřeno jako hodnoty od 0 do 127. Například velmi červený pixel by měl červenou hodnotu 127 a zelené a modré hodnoty nula. Trik je v tom: červená intenzita 126 je nerozeznatelná od červené intenzity 127 (pro lidské oko). A tak tím, že si v každém červeném pixelu pohrajeme s plus nebo mínus jedním, můžeme skrýt bity v pixelech. Pokud najdeme záludný způsob shromažďování bitů zpět, můžeme načíst data, která jsme vklouzli do obrazu!
Být kreativní! Steganografii lze provádět s jakýmikoli digitálními médii! Můžete si hrát například s bity v hudebních nebo video souborech, ale to vyžaduje, abyste se vydali na další průzkum mimo rámec tohoto pokynu.
Krok 2: Jak je text kódován na počítačích
To, co zde následuje, může vyžadovat titul v CS nebo spoustu vášně pro nadšence k pochopení. Počítače ukládají data v bitech jako 1 s a 0 s. Tyto 1 a 0 jsou obvykle seskupeny do svazků po 8 a označovány jako „bajty“. Jak je vysvětleno zde a zde, existuje několik způsobů, jak můžeme počítači říci, aby interpretoval bajty jako text. Abyste z této steganografické přednášky/instruktáže vytěžili maximum, musíte více či méně rozumět ASCII a UTF8. Toto jsou dva běžné způsoby kódování jazykových dat v sérii bajtů.
Jakmile získáte představu o tomto tématu, pochopíte toto: V ASCII a UTF8 je slovo „the“reprezentováno následujícími bajty (v hexadecimálním formátu) 0x74 0x68 0x65. V binárním formátu jsou tyto bajty: 01110100b 01101000b 01101101b
Kromě toho pochopíte, že v UTF8 je emoji s úsměvem představována následujícími bajty (v hexadecimálním formátu) 0xF0 0x9F 0x98 0x80. V binárním formátu jsou tyto bajty 11110000b 10011111b 10011000b 10000000b.
V každém případě na přiloženém snímku obrazovky uvidíte, že můj počítač s těmito bajty něco dělá. Zvýraznil jsem je ve výstupu programu pomocí šipek a velkého „LOOK!“.
Krok 3: Jak program funguje
Kompilace programu z githubu je snadná. Získejte repo na úvodní stránce zde a poté
Program se spouští takto z příkazového řádku: java Main input-p.webp
v přiložených příkladech uvidíte, že jsem spustil java Main greenman-p.webp
Uděláš to samé.
Když se podíváte na Main.java, uvidíte, že se to stane:
- Program načte obrázek do 2D pole
- Program změní vámi zadanou zprávu na bajtové pole (byte )
- Program poté pomocí třídy MessageHider skryje bajty zpráv v poli obrázku.
- Program poté zapíše obrazové pole 2d do souboru (output.png) se skrytými daty uvnitř. Když se podíváte na tento obrázek, je k nerozeznání od originálu
- Program poté načte output-p.webp" />
Kód tedy funguje tak, jak očekáváme.
Krok 4: Závěr
Dal jsem vám tedy nějaký pracovní kód, důkaz, že funguje ve formě obrázku, a několik poznámek z přednášky, které dávám svým studentům vysokých škol. Také jsem ti dal výzvu! Strávil jsem několik hodin psaním kódu a přípravou poznámek z přednášky, takže se omlouvám, že tento návod nemá mnoho obrázků. Pokud si myslíte, že je steganografie zajímavá, přijměte moji výzvu!