Mein Projekt bei der Arbeit verwendet den Jackson JSON -Serializer, um eine Reihe von Java-Objekten in Strings umzuwandeln, um sie an REST-Services zu senden .
Einige dieser Objekte enthalten vertrauliche Daten, daher habe ich benutzerdefinierte Serialisierer geschrieben, um diese Objekte in JSON-Strings zu serialisieren, dann gzip, und dann mit AES
;
Dadurch werden die Strings in Bytearrays umgewandelt, daher verwende ich den Encoder Base64 in Apache commons
codec, um das Byte zu konvertieren Arrays in Zeichenfolgen. Die benutzerdefinierten Deserializer hinter den REST-Schnittstellen kehren diesen Prozess um:
base64 decode -> decrypt -> decompress -> deserialize using default Jackson deserializer.
Base64
encoding erhöht die Größe der Ausgabe (der gzip-Schritt in der Serialisierung soll helfen, diesen Anstieg zu verbessern), also habe ich Google überprüft, ob es eine effizientere Alternative gibt, die mich zu dieser vorherige Stackoverflow-Thread, der Ascii85 Codierung als effizientere Alternative -
Base64
fügt 33% zur Größe der Ausgabe hinzu, Ascii85
addiert 25% zur Größe der Ausgabe.
Ich habe einige Java Ascii85-Implementierungen gefunden, z. Apache pdfbox, aber ich bin ein wenig misstrauisch, um die Kodierung zu benutzen - es scheint, als ob kaum jemand sie benutzt oder implementiert, was einfach bedeuten könnte, dass Base64 mehr Trägheit hat, oder was stattdessen bedeuten könnte, dass es ein unsicheres Problem mit Ascii85 gibt.
Weiß jemand mehr zu diesem Thema? Gibt es irgendwelche Probleme mit Ascii85, die bedeuten, dass ich stattdessen Base64 verwenden sollte?
Base64 ist Weg häufiger. Der Unterschied in der Größe ist in den meisten Fällen nicht das signifikant, und wenn Sie auf der HTTP-Ebene (die die base64 komprimiert) statt innerhalb Ihre Nutzlast hinzufügen kann gut finden, dass der Unterschied ganz weggeht.
Gibt es irgendwelche Probleme mit Ascii85, die meinen, dass ich stattdessen Base64 verwenden sollte?
Ich würde stark davon abraten, base64 zu verwenden, nur weil es so viel weiter verbreitet ist. Es ist so ziemlich die kanonische Art, binäre Daten als Text darzustellen (es sei denn, Sie möchten natürlich hex verwenden).
ASCII85 ist eine nette Kodierung, die verwendet wird, um diesen zusätzlichen Platz zu sparen. Es werden jedoch viele Zeichen ausgegeben, die beim naiven Senden über HTTP maskiert werden müssten. Die Base64-Kodierung hat eine Variante, die über HTTP gesendet werden kann, ohne zu entkommen.
Hier ist ein Javascript ASCII85-Encoder, falls jemand es versuchen sollte: