.NET의 System.DirectoryServices.Protocols 어셈블리는 가벼운 ASN.1 BER 인코더를 지정하지만 설명서는 좋지 않습니다 (BerConverter
).C# BerConverter.Encode()를 사용하여 응용 프로그램 또는 컨텍스트 관련 태그를 지정할 수 있습니까?
형식 문자열과 인코딩 할 개체 목록을 지정하여 호출합니다.
INTEGER
의이 형식의 문자로 인코딩 될 수i
또는e
SEQUENCE
들{
인코딩 될 수o
문자}
- 인코딩 될 수
OCTET STRING
S 등
저는이 간단한 변환을 사용하고 싶습니다. 그래서 나는 추가 의존성을 가질 필요가 없다. 종속성을 얻는 것은 바람직하지 않습니다. C#은 Powershell에서 호출 할 수 있기 때문이며 .NET에 포함되지 않은 어셈블리가 필요하지 않는 한 C#으로 멋진 스크립트를 배포하는 것은 좋습니다.
그러나 BerConverter는 ASN.1에서 모호성을 제거하는 데 자주 사용되는 응용 프로그램 또는 컨텍스트 관련 태그를 지정하는 방법이없는 것처럼 보입니다. 예를 들어 구성된 유형의 구성 요소가 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
그러나 두 번째 시퀀스가 [Application 1]
또는 61
일 필요가있는 경우 ... 인코딩에서 해당 형식의 문자열을 내보내려면 무엇을 넣어야할지 모르겠습니다.
BerConverter에도이 기능이 있습니까?
당신 디 컴파일러 (예 : ILSpy)를 사용하고 BerConverter 코드를보고 무슨 일이 일어나는지 볼 수 있습니다. –
@bosonix 의견을 주셔서 감사합니다. 나는 디 컴파일을 생각하지 않은 이유를 모른다. 저는 JetBrains dotPeek를 사용하여'BerConverter.Encode()'를 역 컴파일했고, 커버 아래에서'ber_printf()'를 호출하고 있다는 것을 알았습니다. 더 나은 문서화가 있습니다. 아래 답변을 참조하십시오. – petrsnd