sposób na proste zaszyfrowanie stringa

0

Witam,
Mam taki problem pisze program który z pliku txt wyciąga całą zawartość i zapisuje do stringa następnie z powrotem zapisuje po zmianie do pliku txt teraz chciałbym w prosty sposób zaszyfrować tego stringa zanim go zapisze do pliku. Ważne aby później łatwo było go odszyfrować. Będę wdzięczny za każdy pomysł.

0

xor?

0

z tego co teraz wyczytałem to muszę zamienić ten tekst na liczby dziesiętne potem na binarne ? i zrobić xor ?
hmm może ktoś poda działający przykład bo nie wygląda to prosto ..

0

Wszystkie dane w komputerze są przechowywane jako dane binarne... Wystarczy ci po prostu xorować kolejne znaki z tekstu z jakimiś znakami z klucza. Odszyfrowanie wygląda identycznie.

0

Ten kod zamienia mi tekst ze stringa na binarny a jak zrobić żeby ten proces odwrócić ? I jak gdy np juz mam binarną litere np m = 01101101 z xor'ować ją np kodem 10101010? wiem tylko że c=a^b ale jak to w praktyce napisać ?


String omg = "Zupa";
            byte[] bytes = omg.getBytes();
            StringBuilder binary = new StringBuilder();
            for (byte b : bytes)
            {
                int val = b;
                for (int i = 0; i < 8; i++)
            {
                binary.append((val & 128) == 0 ? 0 : 1);
                val <<= 1;
            }
            binary.append(' ');
            }
            System.out.println(omg + "\nTo binary: " + binary);
</code=java>
0

Przecież jak nie musisz to nie zamieniaj na binarne, po prostu każdą literę string'a xornij z kluczem (zależy jak jeszcze go używasz), czyli dostępem do każdego znaku xorujesz, a potem na odwrót też xorujesz z tym, że to co już masz zaszyfrowane xorujesz znowu z kluczem.

0

brzmi to faktycznie łatwiej .. mam mega prośbę mógłby ktoś pokazać jakiś przykład jak stringa Xor'ować nawet najprostszy

0
public class Main {
    static byte[] cipher(byte[] data, byte[] key) {
        for(int i = 0; i < data.length; i++) {
            data[i] = (byte) (data[i] ^ key[i % key.length]);
        }

        return data;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        byte[] coded = cipher("Test".getBytes(), "My key".getBytes());
        System.out.println("Zakodowane: ");
        for (byte b : coded) {
            System.out.printf("%c", b);
        }
        System.out.println();
        System.out.println("Odkodowane: ");
        byte[] decoded = cipher(coded, "My key".getBytes());
        for (byte b : decoded) {
            System.out.printf("%c", b);
        }
    }

}

Teoretycznie jeśli klucz będzie dostatecznie długi to złamanie zwykłego XOR'a graniczyć będzie z cudem :P

0

A no się trochę spóźniłem :D

Ogólny zarys o co chodzi (C#):

static string Encode(string _text, string key)
        {
            StringBuilder text = new StringBuilder(_text);
            for (int i = 0; i < text.Length; i++)
            {
                text[i] = (char)((int)text[i] ^ key[i % key.Length]); // xorowanie każdego znaku z każdym znakiem klucza
            }
            return text.ToString();
        }

        static string Decode(string _text, string key)
        {
            StringBuilder text = new StringBuilder(_text);
            for (int i = 0; i < text.Length; i++)
            {
                text[i] = (char)((int)text[i] ^ key[i % key.Length]); // to samo tylko, że odszyfrowuje
            }
            return text.ToString();
        }

        static void Main(string[] args)
        {
            string napis = "ale-fajny-napis";
            string klucz = "mój-tajny-klucz";
            Console.WriteLine("Zaszyfrowany napis: " + Encode(napis, klucz));
            Console.WriteLine("Odszyfrowany napis: " + Decode(Encode(napis, klucz), klucz));
            Console.Read();
        }
0

Eureka działa :PP hmm musze dokładnie przeanalizować te przykłady ;) ale wieeeelkie dzięki dla WAS ;D

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0