Wenn Sie Binärdaten haben, die Sie kodieren müssen, welches Kodierungsschema verwenden Sie?
Ich weiß über:
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.
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.
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.
Es war einmal UTF-7. Es ist offiziell veraltet, aber es funktioniert immer noch als ACE (ASCII Compatible Encoding). Jetzt gibt es IDN .
Base64 ist der De-facto-Standard. Mit etwas anderem wird nach Ärger gefragt.