2011-08-13 6 views
5

मैं एक फाइल पर हस्ताक्षर करने में सक्षम होना चाहता हूँ। इसका मतलब है कि प्राप्तकर्ता यह जांच सकता है कि फ़ाइल वास्तव में मुझसे है और इसकी सामग्री देख सकती है। क्या सी ++ में ऐसा करने का कोई आसान तरीका है?सी ++ में सार्वजनिक कुंजी क्रिप्टोग्राफी को लागू करने का सरल तरीका?

मैंने अभी विकिपीडिया पर पीजीपी लेख पर एक नज़र डाली थी, लेकिन उन्होंने मुझे "हैशिंग, डेटा संपीड़न, सममित-कुंजी क्रिप्टोग्राफी, और अंततः, सार्वजनिक कुंजी क्रिप्टोग्राफी" के मध्य में कहीं खो दिया। आदर्श रूप में, मुझे एक लाइब्रेरी चाहिए जिसमें एक समारोह signString(string, privateykey) है और प्राप्तकर्ता readSignedString(string, publickey) कार्य करेगा। कोई उपाय?

संपादित करें:

मुझे यकीन है कि मैं सही दृष्टिकोण का उपयोग कर रहा नहीं हूँ, इसलिए यहाँ मैं क्या करने की कोशिश कर रहा हूँ है:

मैं में कुछ सरल चोरी संरक्षण लागू करना चाहते हैं मेरे डेस्कटॉप एप्लिकेशन तो जब उपयोगकर्ता लाइसेंस खरीदता है, तो मैं उन्हें एक हस्ताक्षरित फ़ाइल भेजता हूं जिसमें उनका नाम और ईमेल होता है। उपयोगकर्ता तब फ़ाइल इंस्टॉल करता है और ऐप इसे पढ़ता है: यह हस्ताक्षर वैधता की जांच करता है और नाम/ईमेल (बॉक्स के बारे में) प्रदर्शित करता है। यह सुनिश्चित करने के लिए कि क्रैकर्स इन फ़ाइलों को उत्पन्न नहीं कर सकते हैं, मुझे यह सुनिश्चित करना होगा कि फ़ाइल को डिक्रिप्ट करने की कुंजी एन्क्रिप्ट करने के समान नहीं है। क्या इसे लागू करने का कोई आसान तरीका है?

+0

क्या आप फ़ाइल को एन्क्रिप्ट करना चाहते हैं (जैसा कि आपके कोड उदाहरण कहते हैं) या फ़ाइल पर हस्ताक्षर करें (जैसे आपका टेक्स्ट और विषय कहता है)? यह स्पष्ट नहीं है कि आप – knittl

+0

के लिए क्या पूछ रहे हैं मैं एक फ़ाइल (या एक स्ट्रिंग) पर हस्ताक्षर करना चाहता हूं - मैंने इसे दिखाने के लिए उदाहरण अपडेट किए हैं। मुझे उम्मीद है कि यह स्पष्ट है। –

+1

मुझे पता है, यह वह नहीं है जो मैं पूछ रहा हूं। –

उत्तर

0

जानकारी के लिए, यहां अधिकांश सुझावों का प्रयास करने के बाद, मैं openpgp कमांड लाइन टूल का उपयोग कर समाप्त हुआ। यूपीएक्सड के बाद यह काफी हल्का होता है, यह क्रॉस-प्लेटफॉर्म है और यह मुझे एक आसान तरीके से करने की ज़रूरत है।

0

आप पीजीपी, जीएनयूपीजी के जीएनयू संस्करण को देखना चाहते हैं, यह एक ओएसएस लिब का उपयोग करता है जिसे libgcrypt http://directory.fsf.org/project/libgcrypt/ कहा जाता है जो आप जो चाहते हैं उसे करने में सक्षम होने लगते हैं। मैनुअल के लिए http://www.gnupg.org/documentation/manuals/gcrypt/

6

ओपनएसएसएल आपको लगभग वही चाहिए जो आपको चाहिए। इसमें दो ऐसे कार्य नहीं हैं, लेकिन यह लगभग इतना आसान है। सबसे पहले, प्रत्येक डिजिटल हस्ताक्षर के लिए हैश एल्गोरिदम की आवश्यकता होती है। कारण यह है कि आप फ़ाइल को एन्क्रिप्ट नहीं करते हैं, आप केवल फ़ाइल हैश को एन्क्रिप्ट करते हैं (अन्यथा सत्यापित करने में बहुत लंबा समय लगेगा)।

#include <openssl/evp.h> 

EVP_MD_CTX ctx; 
unsigned char signature[SIGNATURE_LEN]; 
int signature_len; 

EVP_SignInit(&ctx, EVP_sha1()); 
EVP_SignUpdate(&ctx, data, size); 
EVP_SignFinal(&ctx, signature, &signature_len, pkey); 

और काफी हस्ताक्षर सत्यापित करने, केवल EVP_ValidateInit, EVP_ValidateUpdate और EVP_ValidateFinal प्रयोग करने के लिए एक ही:

OpenSSL के साथ आप कुछ इस तरह उपयोग कर सकते हैं। आखिरी फ़ंक्शन यह कहने के लिए 0/1 देता है कि सत्यापन सफल हुआ या नहीं।

आप अभी भी एप्लिकेशन में कुंजी प्राप्त करने की आवश्यकता है, वहाँ ऐसा करने के लिए है कि, जहां आप इसे (फ़ाइल/स्मृति/प्रमाण पत्र आदि) से पढ़ने के आधार पर

2

तुम भी Keyczar उपयोग कर सकते हैं काफी कुछ कार्य हैं अपनी फ़ाइल को एन्क्रिप्ट करने और डिक्रिप्ट करने के लिए।

लेकिन वास्तव में आप इस तरह के कार्यक्रम को क्रैक-सबूत नहीं कर सकते हैं, यह कठिन बनाता है, लेकिन क्रैकर्स आपके प्रोग्राम को अलग कर सकते हैं, उस फ़ंक्शन को ढूंढ सकते हैं जो उन हस्ताक्षरित फ़ाइलों की वैधता की जांच करता है, और इसे किसी भी प्रकार के स्वीकार करने के लिए बदलता है फ़ाइलें।

+0

एक बहुत ही आशाजनक परियोजना की तरह लगता है लेकिन दुर्भाग्यवश यह विंडोज के लिए नहीं है। –

+0

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

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