Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Programatorská hádanka: Najdi heslo

ŘEŠENÍ

Ano, opravdu stačilo udělat XOR (exkluzivní disjunkci) mezi souborem secret_key.dat a secret.dat a výsledek uložit jako .zip. Respektive načíst prvni byte ze souboru secret_key.dat a první byte ze souboru secret.dat a mezi nimi udělat XOR, tím získáme první byte výsledného zipu. Pak pokračujeme až do konce souborů. Využívá se této vlastnosti funkce XOR:
A XOR B = C
B XOR C = A

Tato vlastnost se hojně využívá v počítačové kryptografii.

Program může vypadat, třeba takto (Java):

package testicek;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 *
 * @author MaSo
 */
public class Decrypter {
    
    public static void main(String[] args) throws Exception {
      writeBytesToFile("desecret.zip", decryptFile("secret.dat", readBytesFromFile("secret_key.dat")));
    }

    private static int[] decryptFile(String pathToFile, byte[] key) throws IOException {
        byte[] data = readBytesFromFile(pathToFile);
        int[] ret = new int[data.length];
        for (int i = 0; i < data.length; i++) {
            ret[i] = key[i] ^ data[i];
        }
        return ret;
    }

    private static void writeBytesToFile(String filename, int[] data) throws FileNotFoundException, IOException {
        try (FileOutputStream fos = new FileOutputStream(filename)) {
            for (int i = 0; i < data.length; i++) {
                fos.write(data[i]);
            }
        }
    }

    private static byte[] readBytesFromFile(String filename) throws IOException {
        Path path = Paths.get(filename);
        return Files.readAllBytes(path);
    }
}
Ovšem programovat se nemuselo, stačilo použít utilitu od NirSoftu xorfiles o jejíž existenci jsem nevěděl. Příště vymyslím, něco těžšího...

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny