ASCII チャネル経由で送信する必要があるバイナリ データがある場合、どのテキスト エンコーディング スキームを使用しますか?

StackOverflow https://stackoverflow.com/questions/2090009

  •  21-09-2019
  •  | 
  •  

質問

エンコードする必要があるバイナリ データがある場合、どのようなエンコード スキームを使用しますか?

私は以下について知っています:

  • 16 進エンコーディング. 。非常に単純ですが、かなり冗長で、1 バイトを 2 バイトに展開します。
  • 64 進数. 。最も一般的なものは、それほど冗長ではありませんが、3 バイトを 4 バイトに拡張します。
  • 85 進数. 。一般的ではなく、また冗長ではありませんが、4 バイトを 5 バイトに拡張します。

他に一般的に使用されているエンコーディング スキームはありますか?もしそうなら、どのようなメリットとデメリットがありますか?

編集:これは、たとえば任意のデータを Cookie に保存しようとする場合に便利です。Cookie はテキストのみを保存でき、任意のデータは保存できないため、何らかの方法で変換する必要があります。できれば元に戻す方法も必要です。さらに、ステートレス サーバーを使用しているため、サーバー上に状態を保存できず、Cookie に識別子を入れるだけであると仮定します。もちろん、これを行う場合は、ユーザーがあなたに返しているものが、あなたがユーザーに渡したものであることを検証する何らかの方法 (たとえば、署名) も必要になります。

また、現在のコンセンサスは、base64 が普及しているため、base64 を使用するべきであるということです。そのため、これについても指摘しておきます。 私が使っているものは…誰かが他のものを使用したかどうか、もし使用した場合はその理由が知りたいです。

編集:誰かがこれに遭遇した場合に備えて、Base64 を使用してデータを Cookie に保存したい場合は、次のようにする必要があります。 変更されたBase64実装. 。見る この答え という理由で。

役に立ちましたか?

解決

Cookie 値をエンコードする場合は注意が必要です。これを参照してください 古い答え:

バージョン0のCookieでは、値には空白、括弧、括弧を含めてはなりません。 等号, 、コンマ、二重引用符、スラッシュ、疑問符、サイン、コロン、およびセミコロン。空の値は、すべてのブラウザで同じように動作しない場合があります。

Base64 エンコードにより生成できる = 特定の入力にはシンボルが使用されますが、これは技術的に Cookie では許可されていません (バージョン 0 Cookie は、最も広くサポートされています)。実際に私が疑っているのは、 = 実際にはうまく動作しますが、うまく動作しない可能性があります。

エンコードされたバイナリが Cookie と互換性があることを確実にするには、基本的な 16 進エンコードが最も安全であることをお勧めします (例: ジャワで).

編集: @Paulが有益に指摘したように、 Base 64 の修正バージョン それは「URL セーフ」です (そして、おそらく「Cookie セーフ」だと思います)。標準アルゴリズムの修正バージョンを使用すると、むしろその魅力が薄れてしまいます。

編集:@shoosh さんは、 = は、base64 文字列の終わりを示すためにのみ使用されるため、 =, 、Cookieを設定してから、 = デコードする必要があるときに再度実行します。

他のヒント

それは私が自分自身のエンコーダ/デコーダをロールについて、これまで心配する必要はありませんことを、共通のようですので、

Base64では勝ちます。私はエンコードされたバイナリデータに帯域幅やファイル・スペースを節約心配してきたすべてのアプリケーションに実行していない。

ワンス・アポン・ア・タイム、UTF-7がありました。これは公式に非推奨、それはまだACE(ASCII互換エンコーディング)として働いています。今 IDN にあります。

  • uuencode 一部のサークルで人気があります
  • HTML および XML は、次の方法を使用して Unicode をエンコードします。 この構文

Base64 は事実上の標準です。それ以外のものを使用すると、トラブルが発生します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top