C# Datein Verschlüsseln und Entschlüsseln

Blackwolf99

Newbie
Registriert
Dez. 2015
Beiträge
5
Hallo,
ich habe mich neulich mit der Revert Challenge vom BND beschäftigt und wollte fragen, wie es möglich ist, die Datei so zu verschlüsseln. Das entschlüsseln geht so:
Code:
byte[] buffer = new byte[chi.Length / 2];
            for (int i = 0; i < buffer.Length; i++)
            {
                buffer[i] = Math.Min(chi[i * 2], chi[(i * 2) + 1]);
            }
            return buffer;
Und wie ist es möglich, die Datei zu verschlüsseln?
 
Da als Offset immer i*2 genommen wird spielt nur einer der beiden Werte in chi eine Rolle, bzw wird immer der kleinere genommen,
also "verschlüsseln" einfach indem man ein Array erzeugt was doppelt so lang wie das Orginal ist, dann Random entweder Position 0 oder 1 für den echten Wert nehmen und irgeneinen Random Wert der größer ist als der Orginal für die andere Position.
 
Die Lösungen dazu haben im Internet nichts verloren. Löse die Challenge alleine!
 
Der Code zum verschlüsseln müsste etwa so aussehen:
Code:
        public byte[] SimpleEncode(byte[] source) {
            Random rnd = new Random();

            // Doppelte Länge der Quelle
            byte[] buffer = new byte[source.Length * 2];
            for (int i = 0; i < source.Length; i++) {
                // Echtes Datenbyte-Offset entweder 0 oder 1
                int offset1 = rnd.Next(1);
                int offset2 = 0;
                // Fake Offset entsprechend umgekehrt
                if (offset1 == 0)
                    offset2 = 1;
                // Ein Byte der Quelle übernehmen
                byte sourcebyte = source[i];
                // Und in das Array +0/+1 schreiben
                buffer[i * 2 + offset1] = sourcebyte;
                // Zufälligen Wert der zum Quellbyte addiert wird (darf nicht 255 überschreiten)
                int extraadd = rnd.Next(255 - sourcebyte);
                // Und in das Array-Offset schreiben
                buffer[i * 2 + offset2] = (byte)(sourcebyte + extraadd);
            }
            return buffer;
        }
Das zurückgelieferte Array ist natürlich jedesmal anders, da mit Zufallszahlen gefüllt und das Offset des echten Datenbytes zufällig 0 oder 1 ist ...
 
Zurück
Oben