2012-06-19 25 views
19

मेरे पास पीजीपी डिक्रिप्शन के लिए बाउंसी कैसल का उपयोग करने वाला एक एप्लीकेशन है जो पिछले 8 महीनों के लिए किसी भी मुद्दे के बिना चलाया गया है, और पिछले 2 दिनों में अचानक एक समस्या आई है जहां GetDataStream विधि अपवाद फेंक रहा है:बाउंसी कैसल पीजीपी डिक्रिप्शन इश्यू

अपवाद संदेश: "त्रुटि असममित सिफर सेटिंग"।

आंतरिक अपवाद संदेश: "आरएसए कुंजी नहीं"।

private static PgpObjectFactory getClearDataStream(PgpPrivateKey privateKey, PgpPublicKeyEncryptedData publicKeyED) 
{ 
    // Exception throws here. 
    Stream clearStream = publicKeyED.GetDataStream(privateKey); 

    PgpObjectFactory clearFactory = new PgpObjectFactory(clearStream); 
    return clearFactory; 
} 

कुंजी समाप्त नहीं हुआ है, यह कोई समाप्ति दिनांक होता है:

enter image description here

मैं आवेदन करने के लिए किसी भी परिवर्तन नहीं किया है, मैं कुंजी छुआ है, तो मैं समझ में नहीं आता कि नीली रंग से कोई समस्या क्यों आई है। कोई विचार? मैं उसी कुंजी का उपयोग करके क्लोपेट्रा का उपयोग करके फ़ाइलों को मैन्युअल रूप से डिक्रिप्ट भी कर सकता हूं जो मैं एप्लिकेशन में लोड करता हूं।

अद्यतन 1 - मैं OpenPGP Library for .NET के लिए नि: शुल्क परीक्षण है, जो भी BouncyCastle उपयोग करने के लिए लग रहा है डाउनलोड किया है, और मैं एक ही कुंजी का उपयोग करके फ़ाइलें decrypting कोई मुद्दा नहीं है। किसी कारण से, बाउंसीकास्टल का उपयोग करके डिक्रिप्शन के कार्यान्वयन ने कई महीनों तक काम करना बंद कर दिया है क्योंकि मैं अभी तक पहचान नहीं पाया है।

अद्यतन 2 - मैं पिछले हफ्ते कि काम से फाइल खींच लिया, और मैं यह भी आदेश है कि मैं के माध्यम से कदम कर सकते हैं और डिबग देखने के लिए जहां अपवाद फेंक रहा है और कैसे चर अलग में BouncyCastle के स्रोत कोड डाउनलोड किया है एक फ़ाइल जो काम करता है और एक फ़ाइल जो काम नहीं करती है के बीच। अपवाद PgpPublicKeyEncryptedData वर्ग के GetDataStream विधि की शुरुआत में फेंक दिया जा रहा है:

byte[] plain = fetchSymmetricKeyData(privKey); 

जब मैं इस विधि में कदम, फ़ाइलों है कि मैं किसी भी समस्या के बिना डिक्रिप्ट कर सकते हैं के लिए, मुझे लगता है कि keyData.Algorithm ध्यान दिया है चर को "ElGamalEncrypt" पर सेट किया गया है, जबकि अपवाद फेंकने वाली फ़ाइलों के लिए, फ़ाइल keyData.Algortithm को "सामान्य" पर सेट किया गया है। ये अलग क्यों होंगे? क्या कंपनी ने मुझे फाइलें भेजकर अपनी एन्क्रिप्शन विधि बदल दी? और क्या यह एन्क्रिप्शन विधि BouncyCastle द्वारा उचित रूप से समर्थित नहीं है?

private byte[] fetchSymmetricKeyData(PgpPrivateKey privKey) 
{ 
    IBufferedCipher c1 = GetKeyCipher(keyData.Algorithm); 

    try 
    { 
     c1.Init(false, privKey.Key); 
    } 
    catch (InvalidKeyException e) 
    { 
     throw new PgpException("error setting asymmetric cipher", e); 
    } 

यह भी सुनिश्चित नहीं है कि यह संबंधित है, तो हमारी कुंजी का प्रमाणपत्र प्रकार डीएसए है।

enter image description here

अद्यतन 3 - मैं कैसे अभी तक दिए गए वर्तमान चाबियों का हल निकालने के लिए यह पता लगाने में असमर्थ रहा है। मैंने कल नई कुंजी (प्रकार डीएसए) उत्पन्न की, और नई चाबियों के साथ समस्या हल हो गई है।

अपडेट 4 - यह समस्या अभी मेरे पास आ गई है, जो कि मेरे पिछले अपडेट में काम करने वाली नई कुंजी के साथ है। एक बार फिर, PgpPublicKeyEncryptedData कक्षा के भीतर keyData.Algorithm अब "ElGamalEncrypt" के बजाय "सामान्य" को देखा जा रहा है। एल्गोरिदम संपत्ति क्यों बदलेगी? क्या फ़ाइल कुछ बदल रहा है फ़ाइल को एन्क्रिप्ट कर रहा है?

+3

बिटरोट। xxxxxxx – Joshua

+2

शायद आरएसए कुंजी धारण करने वाला प्रमाण पत्र समाप्त हो गया है? क्या आप इसे देख सकते हैं? – Oleksi

+0

मैंने पहले इसे चेक किया है, और बस एक स्क्रीनशॉट जोड़ा है, हमारी कुंजी की समाप्ति तिथि नहीं है। इसके अतिरिक्त, मैं एक ही चाबी का उपयोग कर क्लोपेट्रा जैसे उपयोगिता का उपयोग कर फ़ाइलों को मैन्युअल रूप से डिक्रिप्ट कर सकता हूं। तो चाबियाँ अच्छी हैं। – mservidio

उत्तर

1

यह महत्वपूर्ण है (: http://www.opensourcejavaphp.net/csharp/itextsharp/PgpPublicKeyEncryptedData.cs.html स्रोत): हो सकता है

यह अपने keyData.Algorithm अलग होने का मूल्य बताते हैं, लेकिन क्यों मैं अभी भी लेकर अनिश्चित हूं।यह संभवतः इनपुट फ़ाइल है जो मामला है। यह अलग (एक अलग कुंजी का उपयोग कर ग्राहक?) हो सकता है

private static IBufferedCipher GetKeyCipher(
      PublicKeyAlgorithmTag algorithm) 
     { 
      try 
      { 
       switch (algorithm) 
       { 
        case PublicKeyAlgorithmTag.RsaEncrypt: 
        case PublicKeyAlgorithmTag.RsaGeneral: 
         return CipherUtilities.GetCipher("RSA//PKCS1Padding"); 
        case PublicKeyAlgorithmTag.ElGamalEncrypt: 
        case PublicKeyAlgorithmTag.ElGamalGeneral: 
         return CipherUtilities.GetCipher("ElGamal/ECB/PKCS1Padding"); 
        default: 
         throw new PgpException("unknown asymmetric algorithm: " + algorithm); 
       } 
      } 
      catch (PgpException e) 
      { 
       throw e; 
      } 
      catch (Exception e) 
      { 
       throw new PgpException("Exception creating cipher", e); 
      } 
     } 
0

लग रहा है एक और पार्टी की तरह अन्य/विभिन्न कुंजियों को एनक्रिप्ट करने है। शायद आपके कीरिंग में आरएसए कुंजी भी है, लेकिन बाउंसीकास्टल केवल पहले (???) का उपयोग करता है। GPG का उपयोग करके आप gpg --list-पैकेट जारी करके अपने एन्क्रिप्टेड फ़ाइल की सामग्री की जांच कर सकते YourEncryptedFile.pgp

के बाद कि 'अच्छा' फाइल करने के लिए, और अपने keyrings के लिए एक ही आदेश लागू होते हैं, और कुंजी पहचानकर्ता तुलना किस फ़ाइल को एन्क्रिप्ट किया गया है। चूंकि आप डीएसए कुंजी का उपयोग कर रहे हैं, फ़ाइल को ElGamal उपकुंजी में एन्क्रिप्ट किया जाना चाहिए।