2012-04-28 10 views
16

हाय मैं अपने Linux मशीन पर openssl स्थापित किया है और हेडर फाइल और प्रलेखन के माध्यम से जा (जो अत्यधिक insufficint है :() है EVP बनाम एल्गोरिथ्म एपीआई का उपयोग कर।OpenSSL के लिए सममित क्रिप्टो

मैं एक परियोजना के निर्माण के लिए कोशिश कर रहा हूँ जो सममित क्रिप्टो algos का उपयोग करता है ('सी' में) aes256cbc की मेरी कार्यान्वयन मैं सीधे कर सकते हैं के लिए (i aes256cbc पर ध्यान केंद्रित कर रहा हूँ)। समस्या मैं कैसे मेरे कोड में पुस्तकालय कार्यों का उपयोग करने के रूप में उलझन में हूँ है।

कार्यों 'aes.h' शीर्षक फ़ाइल में परिभाषित (जो पहली जगह में मुझे दर्शन) का उपयोग करें।

लेकिन गुगलिंग पर मैं इस के लिए कुछ ट्यूटोरियल में आया था जो http://saju.net.in/code/misc/openssl_aes.c.txt

इस के लिए कोई विशिष्ट कारण है या सीधे एईएस तक पहुंच रहा है। कार्यों बेहतर है।

और यदि कोई मुझे ओपनस्ल की क्रिप्टो लाइब्रेरी का उपयोग करने पर किसी भी प्रकार के अच्छे दस्तावेज़/ट्यूटोरियल को इंगित कर सकता है तो भी इसकी सराहना की जाएगी।

बहुत धन्यवाद

पुनश्च मुझे माफ कर दो अगर मैं अनुभवहीन

उत्तर

27

जा रहा हूँ EVP एपीआई है लाभ यह है कि आप सभी सममित सिफर वाले OpenSSL का समर्थन करता है के लिए एक ही एपीआई का उपयोग कर सकते हैं का उपयोग करना एक सामान्य तरीके से, । इससे उपयोग किए गए एल्गोरिदम को प्रतिस्थापित करना आसान हो जाता है, या बाद के चरण में एल्गोरिदम उपयोगकर्ता-कॉन्फ़िगर करने योग्य बनाता है। आपके द्वारा लिखे गए अधिकांश कोड आपके द्वारा चुने गए एन्क्रिप्शन एल्गोरिदम के लिए विशिष्ट नहीं हैं।

यहाँ सीबीसी मोड में एईएस 256 एन्क्रिप्शन के साथ के लिए एक सरल उदाहरण है:

#include <stdio.h> 
#include <openssl/evp.h> 

int main() 
{ 
    EVP_CIPHER_CTX ctx; 
    unsigned char key[32] = {0}; 
    unsigned char iv[16] = {0}; 
    unsigned char in[16] = {0}; 
    unsigned char out[32]; /* at least one block longer than in[] */ 
    int outlen1, outlen2; 

    EVP_EncryptInit(&ctx, EVP_aes_256_cbc(), key, iv); 
    EVP_EncryptUpdate(&ctx, out, &outlen1, in, sizeof(in)); 
    EVP_EncryptFinal(&ctx, out + outlen1, &outlen2); 

    printf("ciphertext length: %d\n", outlen1 + outlen2); 

    return 0; 
} 

सरलता के लिए, मैं त्रुटि हैंडलिंग छोड़े गए।

IMO OpenSSL पर दस्तावेजीकरण का सबसे महत्वपूर्ण टुकड़ों में से एक Network Security with OpenSSL by Viega/Messier/Chandra है। यह 2002 (0.9.7) से है, तो पिछले 10 वर्षों के दौरान OpenSSL में परिवर्तन को कवर नहीं करता है, लेकिन यह अभी भी केवल IMO मैनुअल पृष्ठों का उपयोग करके की तुलना में OpenSSL जानने के लिए एक कम दर्दनाक तरीका है।

+0

धन्यवाद कुरकुरा विवरण और पुस्तक सिफारिश के लिए बहुत कुछ। मैं क्रिप्टो एपीआई के स्पष्टीकरण के लिए नेट पर एक अच्छा संसाधन खोजने के बाद तंग आ गया था। एक और सवाल मैं क्रिप्टो लाइब्रेरी कहां पा सकता हूं जहां मैं सभी evp.h और अन्य * .h फ़ाइलों के वास्तविक कार्यान्वयन को देख सकता हूं। मैंने विभिन्न पुस्तकालयों को पढ़ने की कोशिश की जो lib फ़ोल्डर में openssl के साथ स्थापित हो जाते हैं लेकिन वे मुझे लगता है ऑब्जेक्ट कोड हैं। इस दिशा में किसी भी संकेत दिए गए .. बहुत धन्यवाद – abhi

+1

आप OpenSSL के अपने स्थापित संस्करण मिलान http://www.openssl.org/source/ से स्रोत टारबॉल हड़पने कर सकते हैं। –

+1

ऊपर कहा पुस्तक की सिफारिश के लिए बहुत बहुत धन्यवाद .. यह मेरे एक लॉय मदद की esp अध्याय 6 संदेह मैं EVP एपीआई के बारे में था की बहुत .. एक बार फिर से मंजूरी दे दी धन्यवाद .. – abhi

1

वर्तमान में OpenSSL विकी कैसे कार्यों के EVP परिवार का उपयोग करने पर अच्छा प्रलेखन है: http://wiki.openssl.org/index.php/EVP

एल्गोरिथ्म एपीआई से अधिक EVP का उपयोग कर के अन्य उल्टा कि EVP स्वचालित रूप से हार्डवेयर त्वरण का उपयोग करेगा (है एईएस एनआई अनुदेश सेट की तरह) अगर उपलब्ध हो। एल्गोरिदम एपीआई के साथ आपको इसे मैन्युअल रूप से सक्षम करने की आवश्यकता है।