2014-04-14 1 views
1

내가 그것을 만드는 중이라서으로이 열심히 할 수 없다는 것을 알아 추출합니다.디코딩 DerOctetStrings 나는, 아무 문제 (BouncyCastle, C#을 사용) ASN1에 일을 인코딩 할 수있는 구조를 구축했습니다 .. 바이트 (BouncyCastle, C#을)

BouncyCastle : (DerInteger) object.Value.IntValue)하지만 DerOctetStrings는 직접적인 기능을 갖고있는 것처럼 보이지 않습니다. 아마도 ASCII 문자열과 byte []를 나타낼 수 있기 때문입니다.

그래서 {04 02 46 45} 대표하는 두 바이트 [] {부터 0x46, 0x45} 및 문자열 "FE"

... 그리고, 수동의 짧은 얻을 방법을 알아낼 수 없습니다 태그를 벗기고 길이를 사용하여 뒤따라 오는 바이트를 잡아라. 모든 BouncyCastle 메서드는 모든 옥텟 (04 02 46 45)을 다시 찍거나 다시 인코딩하는 것처럼 보입니다. (04 06 04 02 46 45)

저는 BouncyCastle을 그대로 사용하여 인코더 내가 썼다, 그리고 그것이 내장 된 길이 필드의 체크를 적절하게 던지기 때문이다. 그 경로를 따라 가야한다면 .NET을 사용해도된다. 그리고 더 나쁜 경우 나는 그것을 수동으로 모두 할 것이다. 그러나 그것은 추한 것이다.

홈페이지 질문 : 당신이 (태그와 길이없이) 내장 기능 DerOctetString에서 컨텐츠 바이트를 추출하기 위해 어떻게 사용합니까? 2 차 질문 : 출력 바이트를 일반적인 C# 문자열로 가져 오는 가장 쉬운 방법은 무엇입니까?

- 은 제외 : 문자열 버전으로 직접 이동 How do I decode a DER encoded string in Java? , 단지

그리고 BouncyCastle Java - Decoding DER encoded OCTET strings 를 바이트를 잡아 수 없습니다 : 난 단지 여기에 다음과 유사한 두 개의 게시물을 찾아 냈다 하지만 자바 라이브러리에 대한 단지 회담이 =============================== 나에게

도움이되지 않습니다 그래서 ======================= 편집 : 질문의 주요 부분을 해결했습니다. .GetOctets (그 대답을 수락 함) 이었기 때문에 근본적인 문제는 BouncyCastle의 명확하지 않은 생성자였습니다. 내가 문자열 비트 I 알아낼 경우

DerOctetString(byte[] asn1ByteArray); 

상속 된

Asn1Object.FromByteArray(byte[] asn1ByteArray); 

를 사용 : 사람이 사용하지 않는 BouncyCastle에 ASN.1을 공급하고자한다면

, 즉에 추가 그 솔루션으로 다시 편집 하겠지만, 지금은 명확한 UTF8 문자열을 다루겠다.

답변

1

나는 자바 버전을 사용하므로 C#에서 도움이 될지 모르겠지만 내용을 얻으려고 했는가?DEROctetString 중 getOctets()?

정확히 원하는대로합니다.

+0

나는 작동하지 않았지만 마침내 문제가 무엇인지 알아 냈습니다. (일부는 문자열 비트를 여전히 알아 냈습니다) 문제는 실제로 인코딩에서 발생했습니다. DerOctetString (byte [])은 ASN.1에 피드하는 것처럼 들리며 DerOctetString 객체로 파싱하지만,이 인스턴스에서는 태그가없는 바이트로 간주됩니다. 이것은 다른 생성자가 byte []를 어떻게 다루는 것과 다른 점이다. –

+0

대부분의 BC 클래스에서 생성자는 형식의 "내용"을 취해서 기존 메서드를 구문 분석하기 위해 유틸리티 메서드 나 ASN1InputStream을 사용해야한다고 생각합니다. 하지만 C#에서는 인터페이스가 다를 수 있습니다. 문자열 문제와 관련하여 내용이 실제로 java의 문자열 일 경우 적어도'new String (dos.getOctets()) '를 사용할 수 있지만 대부분의 경우'DEROctetString'에는 비트로 인코딩 된 다른 ASN1 객체 만 포함됩니다. 끈. 따라서 바이트를 'ASN1InputStream'으로 보내야합니다. 정확히 toDERObject (byte [] data) 메소드와 연결된 질문에 구현 된대로. – MatK