Base64-Codierung vs Ascii85-Codierung

8

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?

    
Zim-Zam O'Pootertoot 15.11.2012, 21:05
quelle

3 Antworten

11

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).

    
Jon Skeet 15.11.2012, 21:35
quelle
3

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:

%Vor% %Vor%
    
Steve Hanov 02.04.2015 14:45
quelle
2

Hier ist passender ASCII85 AKA Base85 Decoder (für Benutzer Qwerty ) in JavaScript:

%Vor% %Vor%
    
Dave Brown 31.07.2015 08:11
quelle

Tags und Links