2012-09-06 17 views
37

ho cercato su Internet per buone C++ AES esempio di codice/tutorial che insegna le basi della tecnologia di crittografia e l'uso della Biblioteca, ma finora non ho avuto fortuna ottenere decente Materiale.Esempio di AES utilizzando Crypto ++

buono: facile da capire (solo le basi per studio in viaggio).

+0

Vuoi per capire come utilizzare la libreria o la base dell'algoritmo? –

+0

@MatteoItalia Ho bisogno di usare AES per il mio progetto, quindi imparare la libreria è un must (a causa delle scadenze del progetto) Ma se potessi raccogliere qualche conoscenza lungo la strada che sarebbe GRANDE! – Yohannes

+0

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

risposta

60

Il documento ufficiale di Crypto++ AES è un buon inizio. E dal mio archivio, un'implementazione di base di AES è la seguente:

Si prega di fare riferimento allo here con ulteriori spiegazioni, vi consiglio di comprendere prima lo algorithm e poi di provare a capire ogni linea passo dopo passo.

#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; 
} 

Per i dettagli di installazione:

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

+1

ho aggiunto cryptlib.lib nelle dipendenze aggiuntive e ho provato a crearlo su VS2010 ma ho ricevuto 47 errori di collegamento la maggior parte sono come i seguenti: - errore LNK2005: _tolower già definito in MSVCRTD.lib (MSVCR100D.dll), qualche aiuto in questo? – Yohannes

+0

@ user1470033, ho appena aggiunto alcuni collegamenti di installazione. – berkay

+0

Ho cliccato accidentalmente sull'icona Flag nel tuo ultimo commento. Spero che non abbia danneggiato i tuoi punti! Scusate. –

Problemi correlati