2010-06-07 11 views
17

Ecco quello che ho ottenuto: versioneHowTo Cripta/Encrypt qualche stringa (ad esempio password) su Qt semplice

  • Qt SDK 4.6.2
  • Windows XP

Domanda: come posso semplicemente crittare e crittografare il valore semplice QString? Ho bisogno di questo per essere in grado di salvare una stringa criptata nel file INI e dopo aver riaperto la stringa di crittografia dell'applicazione sul valore di stringa della password normale.

PS: Sto cercando una soluzione semplice e piacevole.

Grazie per l'aiuto!

+1

Date un'occhiata a QCA (http://delta.affinix.com/qca/) – Job

risposta

10

Se si desidera utilizzarlo come password, utilizzare QCryptographicHash. Inserisci la password, salvala nel file. Quindi, quando si desidera confrontare, cancellare l'input e confrontarlo con la password salvata. Naturalmente questo non è molto sicuro, e si può entrare in cose come salting per una maggiore sicurezza.

Se si desidera essere in grado di crittografare e decodificare una stringa archiviata in un file, utilizzare cipher. Dai un'occhiata a Botan o Crypto++.

Questo ovviamente dipende dai livelli di sicurezza desiderati.

1

aggiunge i dati per l'hash crittografico:

QByteArray string = "Nokia"; 
QCryptographicHash hasher(QCryptographicHash::Sha1); 
hasher.addData(string); 

Restituisce il valore hash finale.

QByteArray string1=hasher.result(); 

E Main.cpp esempio

#include <QtGui/QApplication> 
#include <QWidget> 
#include <QHBoxLayout> 
#include <QCryptographicHash> 
#include <QString> 
#include <QByteArray> 
#include <QLabel> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QWidget *win=new QWidget(); 
    QHBoxLayout *lay=new QHBoxLayout(); 
    QLabel *lbl=new QLabel(); 
    QLabel *lbl1=new QLabel("Encrypted Text:"); 
    lbl1->setBuddy(lbl); 
    QByteArray string="Nokia"; 
    QCryptographicHash *hash=new QCryptographicHash(QCryptographicHash::Md4); 
    hash->addData(string); 
    QByteArray string1=hash->result(); 
    lbl->setText(string1); // TODO: use e.g. toHex or toBase64 
    lay->addWidget(lbl1); 
    lay->addWidget(lbl); 
    win->setLayout(lay); 
    win->setStyleSheet("* { background-color:rgb(199,147,88); padding: 7px ; color:rgb(255,255,255)}"); 
    win->showMaximized(); 
    return a.exec(); 
} 
+2

Sarebbe più semplice da usare QCryptographicHash :: hash (http://doc.qt.nokia.com/latest/qcryptographichash.html#hash). Inoltre, hai qualche perdita di memoria: vinci (compresi tutti i suoi widget figli) e l'hash non verrà mai cancellato. – Job

13

C'è SimpleCrypt qui: https://wiki.qt.io/Simple_encryption_with_SimpleCrypt e come suggerisce il nome l'autore dice che la classe non fornisce la crittografia forte, ma la sua abbastanza bene secondo me.

È possibile scaricare un esempio di lavoro qui: http://www.qtcentre.org/threads/45346-Encrypting-an-existing-sqlite-database-in-sqlcipher?p=206406#post206406

#include <QtGui> 
#include "simplecrypt.h" 

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

    QString FreeTrialStartDate ; 

    //Set The Encryption And Decryption Key 
    SimpleCrypt processSimpleCrypt(89473829); 

    QString FreeTrialStartsOn("22/11/2011"); 

    //Encrypt 
    FreeTrialStartDate = processSimpleCrypt.encryptToString(FreeTrialStartsOn); 

    qDebug() << "Encrypted 22/11/2011 to" << FreeTrialStartDate; 

    //Decrypt 
    QString decrypt = processSimpleCrypt.decryptToString(FreeTrialStartDate); 

    qDebug() << "Decrypted 22/11/2011 to" << decrypt; 

    return a.exec(); 
}