2012-08-12 20 views
6

में एईएस का उपयोग करके फ़ाइलों को प्रभावी ढंग से एन्क्रिप्ट करना मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जो कुछ छोटे (1 एमबी से कम) और बड़ी (लगभग 500 एमबी) फ़ाइलों को एन्क्रिप्ट करना चाहिए।
मैं फ़ाइलों को एन्क्रिप्ट कैसे कर सकता हूं और डिस्क पर कहीं भी एन्क्रिप्टेड संस्करण को सुरक्षित रूप से सहेज सकता हूं (i.e.fast)?
क्या समय लगने पर मेरे पास एन्क्रिप्शन प्रगति हो सकती है?जावा

+0

आप कितना सुरक्षा की आवश्यकता होती है:

इस का एक उदाहरण इस सवाल में बताया गया है? आम तौर पर कमजोर एन्क्रिप्शन जितना तेजी से होगा और इसके विपरीत। –

+1

आप 'बाउंसीकास्टेल' एपीआई का उपयोग कर सकते हैं। –

+0

@NoxHarmonium: मुझे इसे कैसे मापना चाहिए? ;-) मुझे फ़ाइलों को यथासंभव सुरक्षित होने की आवश्यकता है। मुझे एन्क्रिप्शन धीमा होने की परवाह नहीं है, मैं केवल यह चाहता हूं कि यह अधिकतम दर पर काम करे। (मेरा मतलब है 'java.io' और' java.nio' 'का उपयोग कर फ़ाइल कॉपी की तरह कुछ) – RYN

उत्तर

6

मान लें कि आपके पास एईएस कुंजी और कुछ आउटपुट स्ट्रीम है, यहां आप स्ट्रीम में एन्क्रिप्शन सजावट कैसे जोड़ सकते हैं।

Cipher enc = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
enc.init(Cipher.ENCRYPT_MODE, key); 
AlgorithmParameters params = enc.getParameters(); 
IvParameterSpec iv = params.getParameterSpec(IvParameterSpec.class); 
out.write(iv.getIV()); 
out = new CipherOutputStream(enc, out); 

यह चतुर्थ पाठ की शुरुआत में चौथाई जोड़ता है; डिक्रिप्ट करने पर, आपको सिफर को शुरू करने के लिए इसे बाहर करने की आवश्यकता होगी।

एक बेहतर समाधान, लम्बे समय, लाइब्रेरी का उपयोग करना होगा जो क्रिप्टोग्राफिक संदेश सिंटेक्स लागू करता है, एस/एमआईएम के लिए आधार। यह एल्गोरिदम और चाबियों के बारे में मेटाडेटा रिकॉर्ड करता है जिनका उपयोग डिक्रिप्शन के लिए किया जा सकता है।

यदि आपका प्रदाता इसे लागू करता है तो मैं जीसीएम या सीसीएम जैसे एईएडी मोड की भी सिफारिश करता हूं। (SunJCE नहीं करता है।) ये सत्यापित करेंगे कि फ़ाइल सही ढंग से डिक्रिप्ट की गई है, और दूषित नहीं हुई है।

+0

@owlstead मुझे पता है कि एपीआई अब जीसीएम के लिए है, और उम्मीद है कि सनजेसी इसे उपलब्ध कराएगा, लेकिन जब मैं जांच करने गया, तो मुझे इसका उल्लेख नहीं मिला [दस्तावेज़ीकरण में।] (Http://docs.oracle। कॉम/जावेज/7/डॉक्स/टेक्नोट्स/गाइड/सुरक्षा/सनप्रोवाइडर.html) क्या आप ओरेकल द्वारा किसी भी जेसीई प्रदाता के माध्यम से इसे प्रदान करने के लिए किसी प्रतिबद्धता के बारे में जानते हैं? – erickson

+1

ओप, मेरी माफ़ी, मैं शायद वहां एक गैर-मानक निर्माण पथ का उपयोग करता हूं। स्रोत से: "* जावा एसई ने पहले ही जेडीके 7 में एईएडी/जीसीएम इंटरफेस को परिभाषित किया है। जेडीके 8 में जेसीए/जेसीई प्रदाता इन एईएडी/जीसीएम इंटरफेस को लागू करेंगे। हम पीकेसीएस 11 के लिए कुछ अतिरिक्त तंत्र भी जोड़ने की संभावना रखते हैं, अगर वर्तमान पीकेसीएस 11 मानक इसका समर्थन करता है। * " –

+0

बेशक बाउंसी कैसल एपीआई में जीसीएम मोड करने के लिए एक कार्यान्वयन होता है। मैं अपने स्टैंडफोर्ड यूनिवर्सिटी क्रिप्टो क्लास को समाप्त करने के बाद इसे प्रदाता में बनाने और बनाने की कोशिश करूंगा। –

2

जैसा कि ऊपर वर्णित भविक के रूप में, बाउंसीकास्टल हल्का और परिपक्व होने का एक अच्छा तरीका होगा। आप निश्चित रूप से एन्क्रिप्शन की प्रगति को देख सकते हैं क्योंकि आप इसे नियंत्रित कर सकते हैं कि एक बार में कितना पढ़ना और लिखना है। आप फ़ाइल से बाइट्स पढ़ सकते हैं, उन्हें एन्क्रिप्ट कर सकते हैं और एक पाइपलाइन में दूसरी फाइल पर वापस लिख सकते हैं। How to encrypt a string/stream with bouncycastle pgp without starting with a file