2017-11-06 6 views
3

BouncyCastle PGP SDK를 사용하여 PGP 암호화 문자열을 해독하려고합니다.BouncyCastle PGP - 스트림 47에서 알 수없는 개체 열기

나는 여러 가지 방법을 시도하고 난 프로세스의 시작 부분에 다음과 같은 오류가 각각의 경우에 (정확한 아래와 위) :

알 수없는 개체 내가 가진 47

스트림 지금까지 두 가지의 nuget 패키지를 시도했다 :

내가 시도 접근이 기사에 제시 키 및 암호화 된 문자열 :

여기

public void DecryptFile(string inputFilePath, string outputPath) 
    { 
     using (FileStream fsEncryptedFile = File.Open(inputFilePath, FileMode.Open)) 
     using (Stream decoderStream = PgpUtilities.GetDecoderStream(fsEncryptedFile)) 
     { 
      PgpObjectFactory factory = new PgpObjectFactory(decoderStream); 
      PgpObject obj = factory.NextPgpObject(); //<-- ERROR THROWN HERE 
      if (!(obj is PgpEncryptedDataList)) 
      { 
       obj = factory.NextPgpObject(); 
      } 
      PgpEncryptedDataList edl = obj as PgpEncryptedDataList; 

      foreach (PgpPublicKeyEncryptedData data in edl.GetEncryptedDataObjects()) 
      { 
       PgpPrivateKey privateKey = null; 
       using (FileStream fsKeyring = File.Open(this.privateKeyPath, FileMode.Open)) 
       { 
        PgpSecretKeyRingBundle bundle = new PgpSecretKeyRingBundle(fsKeyring); // <-- also same error can happen here if I skip the error above 
        PgpSecretKey secretKey = bundle.GetSecretKey(data.KeyId); 
        privateKey = secretKey.ExtractPrivateKey(this.signature.ToCharArray()); 
       } 
       PgpObjectFactory plainFactory = new PgpObjectFactory(data.GetDataStream(privateKey)); 
       PgpObject message = plainFactory.NextPgpObject(); 
       if (message is PgpCompressedData) 
       { 
        message = new PgpObjectFactory(((PgpCompressedData) message).GetDataStream()).NextPgpObject(); 
       } 
       if (message is PgpLiteralData) 
       { 
        PgpLiteralData ld = (PgpLiteralData) message; 
        using (FileStream outStream = File.Create(outputPath)) 
        { 
         Stream inStream = ld.GetInputStream(); 
         byte[] buffer = new byte[0x100000]; 
         int count = inStream.Read(buffer, 0, buffer.Length); 
         while (count > 0) 
         { 
          outStream.Write(buffer, 0, count); 
          count = inStream.Read(buffer, 0, buffer.Length); 
         } 

         outStream.Close(); 
        } 
       } 
       else 
       { 
        Console.WriteLine("ERROR: Unknown type of message in PGP file: {0}", message.GetType().FullName); 
       } 
      } 
     } 
    } 

되어 다음과 같이 내 코드가 보이는 순간 MSDN의 튜토리얼 (위의 링크)

를 코드를 사용하여 생성

  • https://www.igolder.com/PGP/generate-key/
  • https://sela.io/pgp/
  • 내 테스트 키 및 안녕하세요 세계 메시지가 생성 된 https://www.igolder.com/PGP/generate-key/

    -----BEGIN PGP PUBLIC KEY BLOCK----- 
    Version: BCPG C# v1.6.1.0 
    
    mQENBFoAOVkBCACQs2N2Z/b6Fpx+w6Et380qVCtwxJ6GBCRAgwVLGNSKoPJ/L7Sh 
    dBYJAY5hAWWkSNRislYUG7iykK3JtJVOetlts1xFQX5gVVABZphGx9OtbGo95dUJ 
    vxV3w7cpXwHPB45skd2qjzIZLh8PY0BYC4Rf8SIa2LBhPh5CqT339Z8h0dGBhykj 
    X8LyzCVnKVjUUZpaGHoM5zo3jtIhxBgYs6WowuWaMtpEynQW753klBIW+d7UsJ2x 
    zrHu3SNE4hU5ayNvZKwx3Mb1LRf2ydqaniyLoL4nrPzeIr19vBHRfr52itjcG1hD 
    4PoD5zECwKK4KOqfPAjg/8fKa/oDZserdIxnABEBAAG0AIkBHAQQAQIABgUCWgA5 
    WQAKCRC3T9Uo2/H1P2yQCACMjLPb3z1hRErwevJtyEvaixIovVS/I/8anW9t9egr 
    yaoufqC0WPGN8nDrFXRInYeV3hV1C6qSq1BUGsOhS1aFDsjqqUdtQ1oIemAs9BnV 
    trD/noOkR11THtA2+gO3nyIo6vLADiqDQ5RQjzOMTwGVAHJjf8JpxvlIyrb/09sO 
    j1CmhcZfUPYNLV15h3XWHLk1dJhtYTjKYtH+kbS2THln/0LOCd/h9+rdmojQmtau 
    8wkgeX9vhiaGItZ+xjTb7jNTTn+fzO3IkeffgklIZbhX7/NqUKKNFUKYzHDwuS2L 
    uTgd1VhOQWfI/ZTIwmVqoCMOlYdtmrsl12tBp0JZUXJS 
    =8xO7 
    -----END PGP PUBLIC KEY BLOCK----- 
    
    -----BEGIN PGP PRIVATE KEY BLOCK----- 
    Version: BCPG C# v1.6.1.0 
    
    lQOsBFoAOVkBCACQs2N2Z/b6Fpx+w6Et380qVCtwxJ6GBCRAgwVLGNSKoPJ/L7Sh 
    dBYJAY5hAWWkSNRislYUG7iykK3JtJVOetlts1xFQX5gVVABZphGx9OtbGo95dUJ 
    vxV3w7cpXwHPB45skd2qjzIZLh8PY0BYC4Rf8SIa2LBhPh5CqT339Z8h0dGBhykj 
    X8LyzCVnKVjUUZpaGHoM5zo3jtIhxBgYs6WowuWaMtpEynQW753klBIW+d7UsJ2x 
    zrHu3SNE4hU5ayNvZKwx3Mb1LRf2ydqaniyLoL4nrPzeIr19vBHRfr52itjcG1hD 
    4PoD5zECwKK4KOqfPAjg/8fKa/oDZserdIxnABEBAAH/AwMCzc2GbYDsJQxgjinX 
    boFvk2rByvV1wYskgMUzsVvpfh76IsFcdjwavGBvYR2PbPcn7nydX8k5R6CV5U2k 
    H8bR9BjppDsEGfayq3HuKA9/riFvB2hLcoYj2aSF0VDE9iWSMQxiJapOWlCvkDbo 
    CVa5bLEPnhl+w8O8huI3VRc7cJs9tkQTQuKPk7HxVHdSOQATqhrJIqgrIlTS5OWf 
    0GE2mo5+8sNgLyAdjiRu057QAeHZ9o4SsD23cX6LdWzOvjOEQJs/qBL3BFdB1DHZ 
    Jn87kNnwxbQPRF0KeeaUSLahWsP8UENt1IkjI2ff95XGw1MbDv3ZZbv340CBgRS+ 
    A9HK4vT9MUU11dpc2HDix43RUQdNSZ+jKMYji/aJFNNEMbEwMkJMEPirt+6QzK8q 
    uAyFGsoUKtYhjsg8xFxQc8xif6D6pArjBPJKJe+YN45LIAHcyVNhK0X8TGxdrk9o 
    Z1smgSk4+dorpiTHRK3R1JcALjo1JY9bICTNs4xKcRTbs+6PVHEyTzCjh5YixSg2 
    9wmnsza1ucY8YUNLoXUdaIAgI/ggjrejv/JBCduKKRdiMRyjI4IcfQUiZZSO8Y3w 
    JElBXLfdGxaB7vLUA7uGvhDraRjFI2yq+x7FvCVuXmrIQ2xMRi8b2EVzvqWFSYWP 
    oRfceevoW/Jvmpy1KJV+TtlU2EplOjigHFtNvfdfxP57283BjJWD/qGyiPtQyLjA 
    7qOmtuQhnTSvdejv5bL0avlhNZvJYl6GoqO9ymDrelDWkSWFP6yaKiRR1e0mTbwX 
    UukQww0L8dJEYkKsy9rTFUTGq/PXRXxN/FVtNtLHEX8zGmBWUZgjpLwq+cc8CWmo 
    +vJnW5nfWSNySKv1aR0WvTTGK4hndJ3rpt1coUlrrbQAiQEcBBABAgAGBQJaADlZ 
    AAoJELdP1Sjb8fU/bJAIAIyMs9vfPWFESvB68m3IS9qLEii9VL8j/xqdb2316CvJ 
    qi5+oLRY8Y3ycOsVdEidh5XeFXULqpKrUFQaw6FLVoUOyOqpR21DWgh6YCz0GdW2 
    sP+eg6RHXVMe0Db6A7efIijq8sAOKoNDlFCPM4xPAZUAcmN/wmnG+UjKtv/T2w6P 
    UKaFxl9Q9g0tXXmHddYcuTV0mG1hOMpi0f6RtLZMeWf/Qs4J3+H36t2aiNCa1q7z 
    CSB5f2+GJoYi1n7GNNvuM1NOf5/M7ciR59+CSUhluFfv82pQoo0VQpjMcPC5LYu5 
    OB3VWE5BZ8j9lMjCZWqgIw6Vh22auyXXa0GnQllRclI= 
    =XAmm 
    -----END PGP PRIVATE KEY BLOCK----- 
    
    -----BEGIN PGP MESSAGE----- 
    Version: BCPG C# v1.6.1.0 
    
    hQEMA7dP1Sjb8fU/AQf9ERc725Bql1snAN5R/j/xbkRqtdmGPAbYkJQX/IcJYu9R 
    1txnd7Y7xH8FMj1a/QLB5migRO8O3UQ2KHiBTe/+QyeB+FiJVtaRndG/VDXUHATy 
    PRnusYszaYVA8YBAirDqjuuGqhIXym4v9jbyBJWYXNJnrJOPK+C7A6JQEKbQjdwX 
    vFj07faEDpn8RE6PnvU55EqcBH7D7uSMMKElknHUfyMyLrHOkrYky3uHKG/hF4QS 
    XE8jBcpNHBg5p35KH99eJafulhvt0XhGcKS1z41ftFNzGxcLLoxHWNZEGj2RG54h 
    m+5iWY0Ypqg4aTMm/SxWj41pBcc5B4deW8pO6cxC0Mkpjc/4FRl2/ZmnHr4BGIft 
    atuzKN21w4fIPkaNkz1NgfYbJs4Y/lnWjrg= 
    =wxc0 
    -----END PGP MESSAGE----- 
    

    왜 내가 계속이 오류가 발생합니까? 나는 PgpPublicKeyRingBundle 함수를 호출 할 때

    감사

+0

공공 공개 및 비공개 키를 공개 포럼에 게시하는 것은 바람직하지 않습니다. –

+1

@AshishAgarwal - LOL 물론 더미 생성 키이며 아무 것도 사용하지 않습니다! 나는 정직하게 누군가가 이것들이 실제 열쇠일지도 모른다라고 생각할 것을 기대하지 않았다, 당신은 나를 정말로 깨웠다 :) – Bartosz

답변

1

나는 비주얼 스튜디오 2015과 탄력-성 라이브러리를 사용하여이 문제를 가지고 있었다. 난 비주얼 스튜디오 텍스트 파일을 사용하여 PublicKey.asc 및 PrivateKey.asc 텍스트 파일을 만들어 낸 47

스트림

알 수없는 객체입니다.

기본적으로 VS는 유니 코드 UTF-8 인코딩을 사용합니다.

US-ASCII로 변경해야합니다.메뉴에서 파일

  • -> 다른 이름으로 저장을 선택
  • 선택 US-ASCII "인코딩으로 저장"을 할 수 있습니다 다운 메뉴에서 "저장"버튼이있을 것 하락에
  • 으로