2013-07-22 4 views
0

우리 응용 프로그램은 this one과 비슷한 KeyBasedFileProcessor.cs에서 수정 한 것을 사용하여 PG 암호화 파일을 해독합니다. 일반적으로 이것은 정상적으로 작동하지만 특정 파일에 문제가 발생했습니다. 문제가있는 코드는 다음과 같습니다 :BouncyCastle에서 PgpLiteralData를 예상 할 때 PgpMarker가 나타나는 이유는 무엇입니까?

if (message is PgpLiteralData) 
{ 
    PgpLiteralData ld = (PgpLiteralData)message; 
    Stream fOut = File.Create(ld.FileName); 
         Stream unc = ld.GetInputStream(); 
         Streams.PipeAll(unc, fOut); 
         fOut.Close(); 
} 
else if (message is PgpOnePassSignatureList) 
{ 
    throw new PgpException("encrypted message contains a signed message - not literal data."); 
} 
else 
{ 
    // the code goes here and throw this exception, when I debug, message is of type PgpMarker 
    throw new PgpException("message is not a simple encrypted file - type unknown."); 
} 

이 부분에서 나는 코드가 PgpLiteralData를 기대하고있다 생각합니다. 하지만 대신 PgpMarker가 생겨 예외가 발생합니다. PgpMarker가있는 이유는 무엇입니까? 대신 PgpLiteralData를 찾는 방법은 무엇입니까?

+0

마커를 건너 뛰었습니까? 이는 Bouncy Castle Java API에서 가져온 것입니다. "PGP 마커 패킷 - 일반적으로 원본 입력 스트림을 유지하는 것 이외에는 무시해야합니다." –

답변

3

해결 방법은 단순히 PgpMarker 개체를 무시하고 다음 개체를 계속 읽는 것입니다.

는 PGP의 시험 버전 리터럴 패킷으로서이 패킷을 사용하지만, PGP의 어떤 릴리스 버전이 태그 리터럴 패킷을 생성 없음의 OpenPGP 사양이 마커 패키지에 대한 대답이있다. PGP 5.x에서는이 패킷이 다시 할당되어 Marker 패킷으로 사용하도록 예약되어 있습니다.

- The three octets 0x50, 0x47, 0x50 (which spell "PGP" in UTF-8). 

수신시 이러한 패킷은 무시해야

이 패킷의 본체로 구성된다. 이 버전은 PGP 2.6.x에서 사용할 수없는 기능을 사용하는 메시지의 시작 부분에 배치하여 해당 버전에서 메시지를 처리하는 데 최신 소프트웨어가 필요하다고보고 할 수 있습니다.

+0

"PGP"가 PGP 응용 프로그램을 손상시킨 이상한 점이 있지만 거기에 있습니다. –