2010-11-08 14 views
13

साथ डिक्रिप्ट मैं धारणात्मक इन के समान दो कार्यों के लिए देख रहा हूँ:C/C++ एन्क्रिप्ट/सार्वजनिक कुंजी

// returns the encrypted text 
string encrypt(string public_key, string pass_phrase, string text); 
// returns the original text 
string decrypt(string private_key, string pass_phrase, string encrypted_text); 

जहां string एक char*, एक std::string या कुछ और आसानी से उन दोनों के लिए परिवर्तनीय हो सकता है। और public_key और private_key मूल रूप से कुछ भी हो सकता है, कुछ आदेशों (जीजीपी/एसएसएल सामान या जो भी) के साथ उत्पन्न कुंजी से, अन्य सरल कार्यों के साथ उत्पन्न कुंजी के लिए।

मैंने कुछ क्रिप्टोग्राफी पुस्तकालयों (libgcrypt, libgpgme, openssl ...) में देखा है, लेकिन उन पुस्तकालयों के साथ ऐसे कार्यों को लागू करने के लिए यह बिल्कुल आसान नहीं दिखता है: उन्हें असममित के बारे में एक गैर-सतही ज्ञान की आवश्यकता होती है एन्क्रिप्शन और बहुत सारे कोड।

वैसे भी यह कार्य असामान्य प्रतीत नहीं होता है। मैं उपरोक्त दो कार्यों को कैसे कार्यान्वित कर सकता हूं?

+2

क्या आपने कीकजर की जांच की है? http://code.google.com/p/keyczar/ –

+0

एन्क्रिप्टेड_टेक्स्ट शायद बाइनरी डेटा है। आपको एम्बेडेड शून्य के लिए देखना होगा। मैं प्रोटोटाइप में लंबाई शामिल करूंगा ... – pmg

+0

@pmg: मुझे एहसास है कि एक [सी] -टैग है, लेकिन मुझे लगता है कि पेरो सी ++ की 'std :: string' के बारे में सोच रहा है, जो 8-बिट साफ है और इसमें लंबाई भी शामिल है स्ट्रिंग की सामग्री से अलग। –

उत्तर

6

दुर्भाग्य से, एन्क्रिप्शन हमेशा को शामिल एल्गोरिदम के गैर-सतही ज्ञान की आवश्यकता होती है। सही होना मुश्किल है। "एप्लाइड क्रिप्टोग्राफी की हैंडबुक" उपलब्ध विभिन्न एल्गोरिदम के लिए एक अपेक्षाकृत पठनीय गाइड है, इसलिए यह शायद एक लायक है।

आप cryptlib भी आजमा सकते हैं। ऐसा लगता है कि एक अच्छी तरह से स्तरित डिज़ाइन है जो आपको कई पैरामीटर के लिए समझदार डिफ़ॉल्ट देता है ताकि आप विवरण के बारे में ज्यादा चिंता किए बिना उम्मीद कर सकें।

+2

ठीक है, मैं इतना सहमत नहीं हूं। दो कार्यों जिनमें से मैंने हस्ताक्षर दिया (साथ ही एक सार्वजनिक/निजी कुंजी जोड़ी जेन के लिए एक और) एन्क्रिप्शन के साथ खेलने के लिए पर्याप्त होना चाहिए। बेशक वे बहुत अनुकूल नहीं हैं, इसलिए वे कुछ गंभीर के साथ उपयोग करने के लिए पर्याप्त सुरक्षित नहीं होंगे, लेकिन मुझे लगता है कि वे 99% मामलों के लिए ठीक हैं ... – peoro

+0

मैं क्रिप्ट्लिब को देखता हूं, वैसे भी , इस पर ध्यान दिलाने के लिए धन्यवाद! – peoro

+2

मैं सुझाव दूंगा कि आप बाइट्स के मामले में काम करने के लिए अपने फ़ंक्शन हस्ताक्षर भी बदल दें, स्ट्रिंग नहीं। क्रिप्टो आम तौर पर अपारदर्शी बाइट एरे पर काम करता है और स्ट्रिंग सेमेन्टिक्स जोड़कर चीजों को कठिन बना देगा। इस परत पर, एक कुंजी बाइट्स का एक सेट है, एक पासफ्रेज बाइट्स का एक सेट है, और स्पष्ट/सिफर टेक्स्ट दोनों बाइट्स के सेट हैं। वे * किसी प्रकार के चरित्र एन्कोडिंग (एएससीआईआईआई, यूटीएफ -8 या जो कुछ भी) के साथ स्ट्रिंग का प्रतिनिधित्व कर सकते हैं, लेकिन क्रिप्टो परत को इसकी परवाह नहीं है। –

0

मान लें कि आपको कुछ प्लेटफॉर्म अज्ञेयवादी की आवश्यकता नहीं है, क्रिप्टोग्राफी नेक्स्ट जेनरेशन (सीएनजी) विंडोज पर अपेक्षाकृत नई क्रिप्टोग्राफी एपीआई है और यह आश्चर्यजनक रूप से सहज और उपयोग करने में आसान है। मैंने एक लेख लिखा जिसमें सामान्य अनुप्रयोगों में आपको आवश्यक सभी मुख्य क्रिप्टोग्राफिक ऑपरेशंस के उदाहरण शामिल हैं। आलेख के लिए नमूना कोड विज़ुअल सी ++ कंपाइलर का उपयोग करके इन परिचालनों के लिए एक पूर्ण कार्य उदाहरण भी प्रदान करता है।

http://msdn.microsoft.com/en-us/magazine/cc163389.aspx

सार्वजनिक और निजी कुंजियों तारों के रूप में आप बस Base64 या किसी ऐसे ही एन्कोडिंग इस्तेमाल कर सकते हैं इलाज करने के लिए।

+0

असल में मैं लिनक्स पर काम कर रहा हूं। फिर भी धन्यवाद! – peoro

5

जब कोई आसान एन्क्रिप्शन मांगता है, तो मैं केवल KeyCzar की सिफारिश कर सकता हूं।

यह न केवल कई भाषाओं में एक स्वच्छ इंटरफ़ेस प्रदान करता है (जो एक ही कुंजी का उपयोग कर सकता है) लेकिन महत्वपूर्ण रोटेशन और इसी तरह के संचालन के लिए तंत्र भी प्रदान करता है।

और निश्चित रूप से, एल्गोरिदम के लिए सुरक्षित डिफ़ॉल्ट लागू किए गए ताकि आपको तकनीकी विवरणों के बारे में चिंता न करें।

वास्तव में, बेहतर आसान & सुरक्षित संयोजन मैंने अब तक देखा है।

+0

keyczar सिर्फ openssl आदि के आसपास एक रैपर नहीं है? – BjornW

+1

@BjornWesen: हाँ, यह है। लिंक से * Keyczar को खुले, एक्स्टेंसिबल और क्रॉस-प्लेटफ़ॉर्म संगत होने के लिए डिज़ाइन किया गया है। यह ओपनएसएसएल, पायक्रिप्टो, या जावा जेसीई जैसे मौजूदा क्रिप्टोग्राफिक पुस्तकालयों को प्रतिस्थापित करने का इरादा नहीं है, और वास्तव में इन पुस्तकालयों ** पर बनाया गया है। * (जोर मेरा) KeyCzar का एक लाभ यह है कि यह आपके लिए सुरक्षित डिफ़ॉल्ट चुनता है तो आप पैर में खुद को गोली मारो नहीं। –

+0

हाँ, और यह निश्चित रूप से एक बहुत ही सराहनीय लक्ष्य है :) मैंने खुद को एक ही स्थिति में पाया है जो हल्के लाइब्रेरी की ज़रूरत है, हालांकि कुछ सार्वजनिक कुंजी चिह्न/सत्यापन कर रहा है, और ऐसा करने के विचार को खोलने के विचार को "बस" भारी है .. मुझे बाद में libtom मिला जो शायद कई चीजों के लिए ठीक है। – BjornW

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