Lesen base64/zlib-kodierten string aus dem actionscript-Code in python
Ich habe einen string in einer Datenbank gespeichert, die codiert ist, die von Actionscript durch base64ing und dann zlib zu komprimieren.
Beispiel string ist dieser: "eNrj4mZkrShgWdHBx1mUmJfNosQIACUhbci="
Wenn ich entpacken und un base64 dieses per Actionscript, ich bekomme, was ich erwarte:
{"xp": 656398, "rank": 34}
Aber, ich muss in der Lage sein, zu Lesen, das server-Seite. Für jetzt bin ich mit Python, aber ich wäre offen für eine PHP-Lösung oder ähnliches.
So weit in Python ich habe dies ausprobiert:
import base64
import zlib
s = 'eNrj4mZkrShgWdHBx1mUmJfNosQIACUhBCI='
print s.decode("base64").decode("zlib")
Sieht es aus wie Actionscript fügt einige zusätzliche bits in den header, aber mein Python ist nicht stark genug, um die Niederlage dieser 🙂 Jede Hilfe wäre sehr geschätzt werden!
EDIT: Actionscript eine ALS Objekt und wandelt es in ein ByteArray, bevor zlib zu komprimieren und base64ing. Wie es aussieht wird das was ist die Generierung der extra-header/entstellten Daten info.
InformationsquelleAutor Tosh | 2012-09-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Flash werden könnten, mangeln, aber Sie sollten Ihnen ein Beispiel von Actionscript-Code erstellt und prüft diese Daten.
Wenn Sie ein 3rd-party-Bibliothek, ist es möglicherweise die Verwendung einer alternativen characterset als Python erwartet.
wenn Sie die offizielle Bibliothek, es scheint, dass Actionscript implementiert UTF8 und ascii anders. ( es gibt verschiedene Methoden, die hier - http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/utils/Base64Encoder.html)
ist es viel einfacher, genau zu sehen, die actionscript-Code und Hinweis: wenn es ein Problem mit der Bibliothek oder in Ihrem code, als zu versuchen, reverse Engineering für.
Ich denke, es könnte auch einen Versuch Wert, bugfix in umgekehrter Reihenfolge...
Kann ich auch Fragen, warum bist du noch dabei ?
1 - es sei denn, deine Pakete sind viel größer, Sie gehen nicht zu sein, sparen viel Bandbreite. in der Tat, die Komprimierung auf kleine Nutzlasten können tatsächlich erhöhen Sie die Größe.
2 - vorausgesetzt, diese ist web-basiert, Sie sollten in der Lage sein, den server, auf dem Fliegen.
Um Ihre Fragen zu beantworten, ja, die meisten unserer Pakete sind viel größer.. das ist das kleinste Beispiel, das ich finden konnte, aber die meisten Pakete unkomprimiert sind mehrere hundert kb groß. Für 2, wir haben mehrere Millionen Zeilen von archivierten Daten, die wir konvertieren wollen über ein neues system, so gibt es kein live-system zur Ausführung dieser auf. Ich konnte bauen ein ALS rig, der fragt die DB für die Saiten, der Sie liest und dann schreibt, aber ich war wirklich gehofft, um dies zu tun server-Seite mit python.
verstanden über die Archiv - und ja, das wäre wirklich schnell in python. ich fürchte, es wird eine Menge von Schmerzen, um zu versuchen und herauszufinden, was passiert, ohne den flash-code aber. flash könnte über eine andere Nutzlast, oder Polsterung die Nutzlast, oder es könnte sein, Codierung einige andere Darstellung der Zeichenfolge. hoffentlich können Sie feststellen, dass flash, weil ich ehrlich gesagt wollen wissen, was Los ist. ( wenn Sie haben ein .swf , wir könnten in der Lage sein, zu dekompilieren, zu... )
InformationsquelleAutor Jonathan Vanasco
Wenn die Zeichenfolge zuerst base64-ed und dann gezippt, Dekodierung, es sollte anders herum sein!
Ihrem Beispiel und output-strings nicht übereinstimmen;
Den gegebenen input-string '{"xp": 656398, "rank": 34}' nicht erzeugen Sie die Beispiel-Ausgabe (siehe[3] und[4]).
Sollten Sie auch beachten, dass in diesem Fall die
base64
codierte Zeichenfolge ist mehr als das original, und die zusätzlichezlib
- Codierung ist am längsten. Komprimieren von strings diese short ist in der Regel nicht Wert, die Aufwand.Nehmen wir Ihr Beispiel-Ausgabe und verarbeiten zu können, dies ist, was wir bekommen;
Können Sie deutlich sehen, die Texte 'xp' und 'Rang' in der Ausgabe. Und das '"' in der Nähe des Ende könnte interpretiert werden als integer-34.
Scheint es, dass Ihr actionscript wird etwas mangeln der Daten vor der Kodierung und Komprimierung.
InformationsquelleAutor Roland Smith
Für mich sieht es aus wie Sie Ihre Python-Skript ist die Dekodierung in der falschen Reihenfolge. Wenn das, was Sie sagen, über die Kodierung, um korrekt ist, zuerst base64, dann zlib, müssen Sie entschlüsseln, in umgekehrter Reihenfolge:
sagt zwei mal, dass er das erste b64 verschlüsselt, dann Reißverschlüsse. Was Sinn macht.
Gut, versuchen un-zip dann base64-decode die Beispieldaten gibt nur einen Fehler, weil es ist eindeutig nicht die zlib-komprimiert.
InformationsquelleAutor Peter Lillevold
Tosh, Sie sagen, dass Sie zunächst die base64-Daten zu verschlüsseln, und dann zip es vor dem speichern in der Datenbank. Das ist in Ordnung so weit. Nach dem komprimieren der Daten, werden diese binären Daten. Daher nehme ich an, dass Sie gespeichert haben, werden diese Daten im binären format in der Datenbank. Jetzt zeigst du uns einen string:
Diese, Ihrer Meinung nach, stellt die RV-Daten. Nun, ist es ein Widerspruch. Auf der einen Seite gezippte Daten binäre Daten, auf der anderen Seite haben Sie uns klar zeigen, eine Zeichenfolge, die hier geführt von base64-Codierung (Sie können schließen, von der '=' am Ende).
Sie verwechseln etwas.
InformationsquelleAutor Jan-Philip Gehrcke