2014-06-23 6 views
5

का उपयोग करते समय आर्मर्डऑटपुटस्ट्रीम के साथ आउटपुटस्ट्रीम को कब और क्यों सजाने के लिए मैं बाउंसीकास्टल और पीजीपी के लिए काफी नया हूं। मैंने इंटरनेट पर कई लेख और नमूने देखे हैं। लगभग हर एन्क्रिप्शन नमूना कोड नीचे कतरनाBouncyCastle

if (armor) 
     out = new ArmoredOutputStream(out); 

ऐसा लगता है कि अपने स्थानीय परीक्षण दोनों कवच और कोई भी-कवच के साथ पारित कर दिया होता है। मैंने चारों ओर गुगल किया लेकिन कुछ उपयोगी पाया और आर्मर्डऑटपुटस्ट्रीम का जावाडोक केवल दिखाता है कि यह मूल आउटपुट स्ट्रीम है।

तो क्या अंतर है और इसका उपयोग कब किया जाए?

पूरा कोड नमूना:

public static void encryptFile(String decryptedFilePath, 
     String encryptedFilePath, 
     String encKeyPath, 
     boolean armor, 
     boolean withIntegrityCheck)    
     throws Exception{ 

    OutputStream out = new FileOutputStream(encryptedFilePath); 
    FileInputStream pubKey = new FileInputStream(encKeyPath); 
    PGPPublicKey encKey = readPublicKeyFromCollection2(pubKey); 
    Security.addProvider(new BouncyCastleProvider()); 

    if (armor) 
     out = new ArmoredOutputStream(out); 

    // Init encrypted data generator 
    PGPEncryptedDataGenerator encryptedDataGenerator = 
      new PGPEncryptedDataGenerator(PGPEncryptedData.CAST5, withIntegrityCheck, new SecureRandom(),"BC"); 

    encryptedDataGenerator.addMethod(encKey); 


    OutputStream encryptedOut = encryptedDataGenerator.open(out, new byte[BUFFER_SIZE]); 

    // Init compression 
    PGPCompressedDataGenerator compressedDataGenerator = new PGPCompressedDataGenerator(PGPCompressedData.ZIP); 
    OutputStream compressedOut = compressedDataGenerator.open(encryptedOut); 

    PGPLiteralDataGenerator literalDataGenerator = new PGPLiteralDataGenerator(); 
    OutputStream literalOut = literalDataGenerator.open(compressedOut, PGPLiteralData.BINARY, decryptedFilePath, new Date(), new byte[BUFFER_SIZE]); 
    FileInputStream inputFileStream = new FileInputStream(decryptedFilePath); 
    byte[] buf = new byte[BUFFER_SIZE]; 
    int len; 
    while((len = inputFileStream.read(buf))>0){ 
     literalOut.write(buf,0,len); 
    } 

    literalOut.close(); 
    literalDataGenerator.close(); 

    compressedOut.close(); 
    compressedDataGenerator.close(); 
    encryptedOut.close(); 
    encryptedDataGenerator.close(); 
    inputFileStream.close(); 
    out.close(); 

} 
} 

उत्तर

7

ArmoredOutputStream कोई एन्कोडिंग Base64 के लिए इसी तरह का उपयोग करता है, ताकि द्विआधारी प्रिंट न हो सकने बाइट्स कुछ पाठ अनुकूल करने के लिए बदल रहे हैं। यदि आप ईमेल पर डेटा भेजना चाहते हैं, या किसी साइट पर पोस्ट करना चाहते हैं, या कुछ अन्य टेक्स्ट माध्यम चाहते हैं तो आप ऐसा करेंगे।

इससे सुरक्षा के मामले में कोई फर्क नहीं पड़ता है। यद्यपि a slight expansion of the message size है। पसंद वास्तव में इस बात पर निर्भर करता है कि आप आउटपुट के साथ क्या करना चाहते हैं।

3

एएससीआईआई कवच एक सामान्य शब्द है जिसका मतलब है कि एक बाइनरी डेटा प्रतिनिधित्व ASCII- केवल पाठ के रूप में है। तकनीकी रूप से, ascii-armor बाइनरी डेटा के कई तरीके हैं, लेकिन क्रिप्टोग्राफी से संबंधित क्षेत्र the PEM format प्रचलित है (सर्वरफॉल्ट पर this and related questions भी देखें)।

पीईएम मूल रूप से बेस 64-एन्कोडेड बाइनरी डेटा -----BEGIN SOMETHING----- और -----END SOMETHING----- डिलीमीटर और अतिरिक्त शीर्षकों का एक सेट है जिसमें बाइनरी सामग्री के बारे में कुछ मेटा जानकारी हो सकती है।

संबंधित मुद्दे