Steganografia: recupera il testo segreto confrontando l'originale e il testo contenente l'immagine

0

Ho due immagini: st_original.png e st_secret_key_container.png .

La seconda immagine è uguale alla prima, ma contiene un segreto che è il checksum MD5 di qualche tasto. Dovrò decodificare una piccola quantità di testo (lo sfondo è nero nella seconda).

So che potrebbe essere sgradito qui, ma è un compito universitario, devo recuperare l'MD5 dall'immagine e invertire così posso decrittografarlo con il testo.

Non sto chiedendo di fare il lavoro per me, in realtà mi sto divertendo a capirlo, ecco perché non ho caricato le foto né il testo crittografato. Ho provato alcune cose fino ad ora come verificare la presenza di una filigrana nella foto con OpenPuff e StegoMagic. La maggior parte degli strumenti che ho trovato su Google non sono aggiornati o non sono più aggiornati dagli anni '90.

Il testo è sicuramente nascosto nell'immagine non è questione di "se", è chiaramente indicato nell'assegnazione che è un testo nascosto tramite la stenografia LSB (bit meno significativo).

Ho trascorso un po 'di tempo a cercare di capire questa cosa - il problema è il formato PNG e lo sfondo nero. Se il suo unico nascondendo un MD5 (32 caratteri), allora non molto dovrebbe davvero cambiare. Lo sfondo nero lo rende difficile perché molto cambiato.

Qualche idea su come dovrei affrontare questo?

    
posta vlatkozelka 02.01.2015 - 20:28
fonte

1 risposta

0

Risolto il problema ... Ho provato uno strumento che potenzia LSB, e lì ho visto che i primi pixel erano chiaramente diversi, quindi la lunghezza dei 32 caratteri doveva essere scritta lì. Tutto ciò di cui avevo bisogno erano i valori dell'LSB dei primi 256 byte, ognuno di questi 8 crea un carattere dell'MD5.

Ecco il codice che ho scritto in Java, insieme all'output:

BufferedImage img = ImageIO.read(new File("D:\crypto secret\2.png"));
        WritableRaster raster = img.getRaster();
        DataBufferByte buffer = (DataBufferByte) raster.getDataBuffer();
        byte[] data = buffer.getData();

        int j = 0 ;
        String[] bin = new String[32];
        char[] md5 = new char[32];

        for(int i = 0 ; i <256;i++){

            System.out.print(data[i]&0xFF);
            if((j+1)%8==0){
                System.out.println();
            }
            j++;
        }


00110100
01100101
01100101
00110111
00111001
01100100
00110111
00110110
00110011
00110011
01100100
00111000
01100001
01100001
01100100
00111000
00110010
00111000
01100001
00110011
00110100
01100100
00110100
01100101
00111000
00110110
00110010
00110001
01100011
01100001
01100100
00110010

Li ho convertiti in ASCII tramite uno strumento online che mi ha dato questo MD5% di4ee79d7633d8aad828a34d4e8621cad2 e quindi una ricerca su questo mi ha dato questa stringa antonine , che fa parte del nome della mia università. Poi sono andato avanti e ho decodificato il testo segreto con quella chiave, in modalità EDS ECB.

Il testo nascosto era:

Hello students. You solved Task 3 challenge.
    
risposta data 03.01.2015 - 21:26
fonte

Leggi altre domande sui tag