.NETのSystem.DirectoryServices.Protocolsアセンブリでは、軽量のASN.1 BERエンコーダが指定されていますが、ドキュメントは大きくはありません。BerConverter
。C#BerConverter.Encode()でアプリケーションまたはコンテキスト固有のタグを指定できますか?
エンコードする書式文字列とオブジェクトのリストを指定して呼び出すことができます。
INTEGER
sがi
又はe
OCTET STRING
sはSEQUENCE
sは{
と}
- 等
o
文字で符号化することができる形式の文字で符号化することができます
私は本当にこの単純な変換を利用したいと思います私は別の依存関係をとる必要はありません。依存関係を取ることは望ましくありません。なぜなら、C#はPowershellから呼び出し可能であり、.NETに含まれていないアセンブリを必要としない限り、C#で何か面白いスクリプトを配布することは素晴らしいことです。
しかし、BerConverterはアプリケーションやコンテキスト固有のタグを指定する方法を持たないように思われます。たとえば、構築型のコンポーネントがOPTIONAL
だから、私はエンコードすることができ、以下:
BerConverter.Encode("{i{i}}", 1, 2);
与える:
30 84 00 00 00 0c 02 01 01 30 84 00 00 00 03 02 01 02
しかし、その2番目のシーケンスが[Application 1]
または61
である必要がある場合は...私はエンコードでそれを放出するフォーマット文字列をどのように置くべきか分かりません。
BerConverterにもこの機能がありますか?
ます逆コンパイラ(例えばILSpy)を使用してBerConverterコードを調べて、それが何であるかを調べることができます。 –
@bosonixコメントをいただきありがとうございます。なぜ私は逆コンパイルを考えなかったのか分かりません。私はJetBrainsのdotPeekを使って 'BerConverter.Encode()'を逆コンパイルしていましたが、カバーの下で 'ber_printf()'が呼び出されていました。それはより良い文書を持っています。以下の回答を参照してください。 – petrsnd