2017-10-12 6 views
1

DにBasic Encoding Rulesコーデックを書き込もうとしていますが、長さバイトが0x80に設定された、長さが不定のエンコードのデータをエンコードする機能が必要です。値のバイトの終わりは、 null 0x00 0x00(コンテンツの終了)。ただし、2つのnullがエンコードされる実際の値の一部である場合があります。たとえば、OCTET STRINGがある場合、隣接する2つのバイトは0x00 0x00となり、符号化された値の一部ではなくEND OF CONTENTと解釈され、結果として符号化された値が切り捨てられます(最善のシナリオ)。 END OF CONTENTと解釈されることなく、ダブルヌルをエンコードする方法はありますか?または、二重NULLを持たない値のみをエンコードすると予想されますか?私はまだこれについて何らかの仕様で見つけなければならない。BERで無限の長さでエンコードされたオクテット文字列内で、二重ヌルオクテットをどのようにエスケープしますか?

答えて

2

0x80と0x00 0x00の間にプレーンなOCTET STRINGコンテンツを置くことはありません。代わりに、そこに明確な長さのコード化されたOCTET STRINGの[可能性のある部分]を入れます。言い換えれば

は、不定長エンコードされ、単一オクテットは、「AB」ASCII文字列をチャンク(例えば0x41から0x42に16進数)次のようになります。

0x24 0x80  0x04 0x01 0x41  0x04 0x1 0x42  0x00 0x00 
^   ^    ^    ^
outer header inner chunk #1  inner chunk #2 outer EOO sentinel 

最終的な結果は、デコーダが持っていないということですペイロードマージンが明確な長さのエンコードされたピースによって明確に定義されるため、EOOマークを検索する実際のペイロードをスキャンする必要があります。

+0

この場合、外側のヘッダはコンストラクタとして表現され、0x24としてエンコードされる必要があります。識別子タグ(P/C)のビット6が構築されるように設定される。 – pepo

+0

@pepo確かに!ありがとう! ;-) –

関連する問題