2012-09-06 28 views
37

मैं अच्छा C++ एईएस कोड नमूना/ट्यूटोरियल कि एन्क्रिप्शन प्रौद्योगिकी के मूल बातें और लाइब्रेरी के उपयोग सिखाता है, लेकिन अभी तक मुझे कोई भाग्य अच्छा हो रही पड़ा है के लिए इंटरनेट खोज की है सामग्री।उदाहरण का उपयोग करते हुए क्रिप्टो ++

अच्छा: समझने में आसान (बस अध्ययन के लिए मूल बातें)।

+0

आप को समझने के लिए उपयोग करना चाहते हैं लाइब्रेरी या एल्गोरिदम का आधार? –

+0

@MatteoItalia मुझे अपने प्रोजेक्ट के लिए एईएस का उपयोग करने की आवश्यकता है ताकि लाइब्रेरी सीखना जरूरी है (परियोजना की समयसीमा के कारण) लेकिन अगर मैं कुछ ज्ञान को उस तरीके से स्कूप कर सकता हूं जो महान होगा! – Yohannes

+0

http://www.cryptopp.com/wiki/Advanced_Encryption_Standard –

उत्तर

60

Crypto++ AES का आधिकारिक दस्तावेज़ एक अच्छी शुरुआत है। और मेरे संग्रह से, एईएस का मूल कार्यान्वयन निम्नानुसार है:

कृपया अधिक स्पष्टीकरण के साथ here देखें, मैं आपको पहले algorithm समझने की सलाह देता हूं और फिर प्रत्येक पंक्ति चरण को समझने की कोशिश करता हूं।

#include <iostream> 
#include <iomanip> 

#include "modes.h" 
#include "aes.h" 
#include "filters.h" 

int main(int argc, char* argv[]) { 

    //Key and IV setup 
    //AES encryption uses a secret key of a variable length (128-bit, 196-bit or 256- 
    //bit). This key is secretly exchanged between two parties before communication 
    //begins. DEFAULT_KEYLENGTH= 16 bytes 
    byte key[ CryptoPP::AES::DEFAULT_KEYLENGTH ], iv[ CryptoPP::AES::BLOCKSIZE ]; 
    memset(key, 0x00, CryptoPP::AES::DEFAULT_KEYLENGTH); 
    memset(iv, 0x00, CryptoPP::AES::BLOCKSIZE); 

    // 
    // String and Sink setup 
    // 
    std::string plaintext = "Now is the time for all good men to come to the aide..."; 
    std::string ciphertext; 
    std::string decryptedtext; 

    // 
    // Dump Plain Text 
    // 
    std::cout << "Plain Text (" << plaintext.size() << " bytes)" << std::endl; 
    std::cout << plaintext; 
    std::cout << std::endl << std::endl; 

    // 
    // Create Cipher Text 
    // 
    CryptoPP::AES::Encryption aesEncryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH); 
    CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption(aesEncryption, iv); 

    CryptoPP::StreamTransformationFilter stfEncryptor(cbcEncryption, new CryptoPP::StringSink(ciphertext)); 
    stfEncryptor.Put(reinterpret_cast<const unsigned char*>(plaintext.c_str()), plaintext.length() + 1); 
    stfEncryptor.MessageEnd(); 

    // 
    // Dump Cipher Text 
    // 
    std::cout << "Cipher Text (" << ciphertext.size() << " bytes)" << std::endl; 

    for(int i = 0; i < ciphertext.size(); i++) { 

     std::cout << "0x" << std::hex << (0xFF & static_cast<byte>(ciphertext[i])) << " "; 
    } 

    std::cout << std::endl << std::endl; 

    // 
    // Decrypt 
    // 
    CryptoPP::AES::Decryption aesDecryption(key, CryptoPP::AES::DEFAULT_KEYLENGTH); 
    CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption(aesDecryption, iv); 

    CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::StringSink(decryptedtext)); 
    stfDecryptor.Put(reinterpret_cast<const unsigned char*>(ciphertext.c_str()), ciphertext.size()); 
    stfDecryptor.MessageEnd(); 

    // 
    // Dump Decrypted Text 
    // 
    std::cout << "Decrypted Text: " << std::endl; 
    std::cout << decryptedtext; 
    std::cout << std::endl << std::endl; 

    return 0; 
} 

स्थापना जानकारी के लिए:

sudo apt-get install libcrypto++-dev libcrypto++-doc libcrypto++-utils

+1

मैंने अतिरिक्त निर्भरताओं में cryptlib.lib जोड़ा और इसे VS2010 पर बनाने की कोशिश की लेकिन 47 लिंकिंग त्रुटियां मिलीं, जिनमें से अधिकांश निम्न हैं: - त्रुटि LNK2005: _tolower पहले से ही परिभाषित है MSVCRTD.lib (MSVCR100D.dll), उसमें कोई मदद? – Yohannes

+0

@ user1470033, मैंने अभी कुछ इंस्टॉलेशन लिंक जोड़े हैं। – berkay

+0

मैंने गलती से आपकी अंतिम टिप्पणी में ध्वज आइकन पर क्लिक किया। मुझे उम्मीद है कि यह आपके अंक को नुकसान नहीं पहुंचाएगा! माफ़ कीजिये। –

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