Seite 1 von 1

Python nach C# übersetzen

Verfasst: Freitag 15. Juli 2011, 15:00
von AyrA
ich habe hier ein Python skript (ca. 350 Zeilen, nichts weltbewegendes) das eine komprimierte, verschlüsselte Zeichenfolge wieder in die Ursprungsform zurück bringt
Dieses muss ich nach C# übersetzen, das geht so weit ganz wunderbar (hoffe ich zumindest)
jetzt habe ich aber festgestellt, dass die Funktion:

Code: Alles auswählen

def rc4crypt(data, key):
    x = 0
    box = range(256)
    for i in range(256):
        x = (x + box[i] + ord(key[i % len(key)])) % 256
        box[i], box[x] = box[x], box[i]
    x = 0
    y = 0
    out = []
    for char in data:
        x = (x + 1) % 256
        y = (y + box[x]) % 256
        box[x], box[y] = box[y], box[x]
        out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))

    return ''.join(out)
etwas anderes zurückliefert, als die C# Funktion:

Code: Alles auswählen

        static byte[] rc4crypt(byte[] data,byte[] key)
        {
            byte[] ret = new byte[data.Length];
            byte[] box = new byte[256];
            int x = 0, y = 0, i = 0;
            byte  temp = 0;

            for (x = 0; x < 256; x++)
            {
                box[x] = (byte)x;
            }

            for (i = 0; i < 256; i++)
            {
                x = (x + box[i] + key[i % key.Length]) % 256;
                temp = box[i];
                box[i] = box[x];
                box[x] = temp;
            }

            x = y = 0;

            for(i=0;i<data.Length;i++)
            {
                x = (x + 1) % 256;
                y = (y + box[x]) % 256;
                temp = box[y];
                box[y] = box[x];
                box[x] = temp;
                ret[i] = (byte)(data[i] ^ box[(box[x] + box[y]) % 256]);
            }

            return ret;
        }
ich haby python zuvor leider noch nie gesehen und rate daher hauptsächlich, was ich mich aber hauptsächlich frage, ist ob box[x], box[y] = box[y], box[x] wirklich temp = box[y];
box[y] = box[x];
box[x] = temp;
entspricht

Weiss das jemand?

ich kann gerne auch das komplette skript hochladen

Re: Python nach C# übersetzen

Verfasst: Freitag 15. Juli 2011, 15:30
von BlackJack
@AyrA: Das mit `temp` sieht richtig aus. Daran sollte es nicht liegen.

Re: Python nach C# übersetzen

Verfasst: Freitag 15. Juli 2011, 19:54
von bords0
Spontan würde ich sagen, dass x=0; vor dem zweiten for fehlt.

Re: Python nach C# übersetzen

Verfasst: Freitag 15. Juli 2011, 19:59
von AyrA
bords0 hat geschrieben:Spontan würde ich sagen, dass x=0; vor dem zweiten for fehlt.
Danke!
ist mir auch gerade aufgefallen, dazu kam, dass der Schlüssel, den ich an die Funktion übergeben sollte offenbar nicht als string, sondern als bytes übergeben werden musste. Jetzt stimmt die Entschlüsselung und das Ergebnis ist das richtige und nicht irgend so nen kuddelmuddel

Re: Python nach C# übersetzen

Verfasst: Freitag 15. Juli 2011, 23:39
von AyrA
Ich möchte mich noch für die Hilfe bedanken, das Skript läuft nun einwandfrei. Der Thread kann also geschlossen werden, wenn wer das möchte