Welches Kodierungsschema verwenden Sie, wenn Sie Binärdaten haben, die Sie über einen ASCII-Kanal senden müssen?

7

Wenn Sie Binärdaten haben, die Sie kodieren müssen, welches Kodierungsschema verwenden Sie?

Ich weiß über:

  • Hex-Codierung . Sehr einfach, aber ziemlich ausführlich, erweitert ein Byte auf zwei.
  • Basis 64 . Am häufigsten, nicht so ausführlich, werden drei Bytes zu vier erweitert.
  • Basis 85 . Nicht häufiger, weniger ausführlich, erweitert vier Bytes auf fünf.

Gibt es andere Kodierungsschemata, die allgemein verwendet werden? Wenn ja, wo sind Vor- und Nachteile?

Bearbeiten : Dies ist zum Beispiel nützlich, wenn Sie versuchen, beliebige Daten in einem Cookie zu speichern. Cookies können nur Text speichern, keine willkürlichen Daten, daher müssen Sie sie in irgendeiner Weise konvertieren, vorzugsweise mit einer Möglichkeit, sie zurück zu konvertieren. Nehmen Sie weiterhin an, dass Sie einen zustandslosen Server verwenden, sodass Sie den Status nicht auf dem Server speichern und nur einen Bezeichner in den Cookie einfügen können. Wenn Sie dies tun, müssen Sie natürlich auch überprüfen, ob das, was der Benutzer an Sie zurückgibt, das ist, was Sie an den Benutzer weitergegeben haben, zum Beispiel eine Signatur.

Da der aktuelle Konsens ist, dass Sie base64 verwenden sollten, da es weit verbreitet ist, werde ich auch darauf hinweisen, dass dies ist was ich benutze ... Ich bin nur neugierig, ob jemand etwas anderes benutzt und wenn ja, warum.

Bearbeiten : Falls jemand darüber stolpert, wenn Sie Base64 verwenden möchten, um Daten in einem Cookie zu speichern, müssen Sie eine modifizierte Base64-Implementierung . Siehe diese Antwort für den Grund warum.

    
Paul Wagland 18.01.2010, 23:34
quelle

4 Antworten

13

Zum Codieren von Cookie-Werten müssen Sie vorsichtig sein. Siehe diese ältere Antwort :

  

Bei Version 0 sollten Cookies Werte enthalten   enthält keinen Leerraum, Klammern,   Klammern, entspricht Zeichen , Kommas,   Anführungszeichen, Schrägstriche, Frage   Zeichen, Zeichen, Doppelpunkte und   Semikolons. Leere Werte dürfen nicht   verhalten sich in allen Browsern gleich.

Die Base64-Kodierung kann = -Symbole für bestimmte Eingaben generieren, und dies ist technisch in Cookies nicht erlaubt (sowieso Version 0-Cookies, die am meisten unterstützt werden). In der Praxis vermute ich, dass = tatsächlich gut funktioniert, aber vielleicht nicht.

Ich würde vorschlagen, dass, um absolut sicher zu sein, dass Ihre codierte Binärdatei Cookie-kompatibel ist, dann ist grundlegende Hex-Codierung am sichersten (zB in Java ).

edit: Wie @Paul hilfreich aufgezeigt hat, gibt es eine modifizierte Version von Base 64 das ist "URL safe" (und ich nehme an, "cookiesafe"). Die Verwendung einer modifizierten Version eines Standardalgorithmus verwässert seinen Charme, wohlgemerkt.

Bearbeiten : @shoosh hat darauf hingewiesen, dass = nur für das Ende der base64-Zeichenfolge verwendet wird. Daher könnten Sie = beschneiden, den Cookie setzen und dann = erneut, wenn Sie es entschlüsseln müssen.

    
skaffman 18.01.2010, 23:53
quelle
4

Base64 gewinnt, weil es so üblich ist, dass ich mir keine Sorgen machen muss, meinen eigenen Encoder / Decoder zu rollen. Ich habe keine Anwendungen kennengelernt, bei denen ich mir Sorgen darüber gemacht habe, Bandbreite oder Dateibereich in verschlüsselten Binärdaten zu speichern.

    
jball 19.01.2010 00:04
quelle
2

Es war einmal UTF-7. Es ist offiziell veraltet, aber es funktioniert immer noch als ACE (ASCII Compatible Encoding). Jetzt gibt es IDN .

    
bmargulies 18.01.2010 23:47
quelle
1

Base64 ist der De-facto-Standard. Mit etwas anderem wird nach Ärger gefragt.

    
shoosh 18.01.2010 23:48
quelle

Tags und Links