Crittografia dati simmetrica



  • Vorrei sapere se c'è una libreria standard o compatibile con il QT che mi permetta di fare in maniera abbastanza semplice criptazione di stringhe in maniera simmetrica.

    Avete qualche link da suggerirmi? Grazie :)



  • Se gia' usi OpenSSL nel tuo programma puoi usare direttamente quello: https://wiki.openssl.org/index.php/EVP_Symmetric_Encryption_and_Decryption in alternativa puoi usare Crypto++ https://www.cryptopp.com/wiki/Advanced_Encryption_Standard



  • Grazie, proverò con openSSL. Non lo sto già usando in realtà ma mi sembra anche il più facile da utilizzare sotto ambiente windows. :)



  • In realta' dipende. OpenSSL usa un API in C quindi potrebbe essere "pesantina" da digerire. D'altra parte, a meno di eventi epocali (vedi heartbleed che pero' era in libssl, non in libcrypto), OpenSSL e' meno prona a bug che potrebbero compromettere la sicurezza dei tuoi dati perche' e' usata da cosi' tanta gente



  • @VRonin
    Dopo quello che mi hai detto sto anche tentando (inutilmente) di compilare le livrerie Crypto++ sotto windows con QT5.7 seguendo questo tutorial http://www.qtcentre.org/threads/28809-Compiling-amp-using-Crypto-with-mingw-version-of-

    Inutile dire che ho un errore:
    No rule to make target 'cryptlib_bds.cpp', needed by 'debug/cryptlib_bds.o'

    Sai mica suggerirmi dove sto sbagliando o indicarmi una guida da seguire?



  • La cosa piu' semplice e' usare CMake. Scarica cmake da qui: https://cmake.org/download/ e installalo (nel mio esempio lo installo in C:\Program Files (x86)\CMake )

    poi apri il terminale di mingw vai nella cartella del sorgente di crypto++ e esegui:

    set PATH=C:\Program Files (x86)\CMake\bin;%PATH%
    set CRIPTOPPLIBPATH = C:\Cryptopp\
    if not exist "%CRIPTOPPLIBPATH%" mkdir %CRIPTOPPLIBPATH%
    mkdir build
    cd build
    cmake -G "MinGW Makefiles" -DCMAKE_DEBUG_POSTFIX=d -DCMAKE_INSTALL_PREFIX=%CRIPTOPPLIBPATH% -DCMAKE_BUILD_TYPE=DEBUG ../
    mingw32-make
    mingw32-make install
    cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=%CRIPTOPPLIBPATH% -DCMAKE_BUILD_TYPE=RELEASE ../
    mingw32-make
    mingw32-make install
    

    Questo dovrebbe installare il tutto in C:\Cryptopp\ (a me, per qualche motivo, installa tutto in C: ma ci siamo capiti)



  • @VRonin
    Intanto grazie per avermi tolto dalle beghe e per i consigli.
    Sono riuscito a compilare e installare le librerie, ho anche scoperto il perchè svalvolava nel path di installazione. Bastava aggiungere le virgolette nel parametro che definisce il prefix -> "-DCMAKE_INSTALL_PREFIX=c:\Cryptopp"



  • @VRonin
    Speravo di essermi lasciato tutto alle spalle ... Invece no!
    La compilazione delle librerie Crypto++ è andata a buon fine ma non riesco ad utilizzarle.
    Per essere più precisi implemento una funzione di criptaggio , compilo e non ho errori ma l'applicazione schianta malamente senza errori.

    Vi posto il mio codice:

    Chiper.h
    #include <QDialog>
    #include <QObject>
    
    class Cipher : public QObject
    {
        Q_OBJECT
    
    public:
        explicit Cipher(QObject *parent = 0);
        QString decrypt(const QString &password);
        QString encrypt(const QString &password);
    };
    
    Chiper.c
    #include "cipher.h"
    #include <qDebug>
    #include <iostream>
    #include <fstream>
    
    #include "modes.h"
    #include "aes.h"
    #include "filters.h"
    #include <hex.h>
    #include <sha.h>
    #include <md5.h>
    
    #include <string>
    #include <sstream>
    #include <stdio.h>
    
    using namespace std;
    
    Cipher::Cipher(QObject *parent) : QObject(parent)
    {
        initalize();
    }
    
    
    QString Cipher::decrypt(const QString &password)
    {
    }
    
    QString Cipher::encrypt(const QString &password)
    {
        CryptoPP::MD5 hash;
        byte digest[ CryptoPP::MD5::DIGESTSIZE ];
        std::string message = "Hello World!";
    
        hash.CalculateDigest( digest, (const byte*)message.c_str(), message.length());
    
        CryptoPP::HexEncoder encoder;
        std::string output;
        encoder.Attach( new CryptoPP::StringSink( output ) );
        encoder.Put( digest, sizeof(digest) );
        encoder.MessageEnd();
    
        std::cout << "Input string: " << message << std::endl;
        std::cout << "MD5: " << output << std::endl;
        return QString::fromStdString(message);
    
    }
    

    nel .pro ho messo questo

    win32{
        INCLUDEPATH += C:/Cryptopp/include/cryptopp
    }
    
    
    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libs/ -lcryptopp
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libs/ -lcryptoppd
    
    INCLUDEPATH += $$PWD/libs
    DEPENDPATH += $$PWD/libs
    
    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libs/ -llibcryptopp.dll
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libs/ -llibcryptopp.dlld
    
    INCLUDEPATH += $$PWD/libs
    DEPENDPATH += $$PWD/libs
    
    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libs/ -lcryptopp
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libs/ -lcryptoppd
    
    INCLUDEPATH += $$PWD/libs
    DEPENDPATH += $$PWD/libs
    
    win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libs/ -llibcryptoppd.dll
    else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libs/ -llibcryptoppd.dlld
    
    INCLUDEPATH += $$PWD/libs
    DEPENDPATH += $$PWD/libs
    

    Riuscite a vedere qualcosa che non torna? Il programma esce in maniera anomala ma senza errori e non so dove sbattere la testa.. :(
    PS so che il codice non ci ocmbina nulla co nquello che mi proponevo ad inizio thread ma vorrei che intanto le librerie funzionassero con un QUALSIASI esempio e algoritmo di criptazione :)



  • il .pro sembra sbagliato... dovrebbe essere tipo:

    INCLUDEPATH += C:/Cryptopp/include/cryptopp
    LIBS += -LC:/Cryptopp/lib
    CONFIG(debug, debug|release){
    LIBS += -lcryptopp-staticd
    }
    else{
    LIBS += -lcryptopp-static
    }
    

    ma non dovrebbe crashare malamente... potresti postare la stack trace?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.