2010-06-07 13 views
17

Aquí lo que tengo: VersiónHowTo Cripta/Cifrar un trozo de cuerda (por ejemplo, contraseña) en Qt sencilla

  • Qt SDK 4.6.2
  • Windows XP

Pregunta: ¿Cómo ¿Puedo simplemente cifrar y cifrar simple QString valor? Necesito esto para poder guardar una cadena encriptada en el archivo INI, y luego de volver a abrir la aplicación encriptar la cadena al valor normal de la cadena de contraseña.

PD: Estoy buscando una solución simple y agradable.

¡Gracias por la ayuda!

+1

Tome un vistazo a QCA (http://delta.affinix.com/qca/) – Job

Respuesta

10

Si solo desea utilizarlo como contraseña, use un QCryptographicHash. Haga clic en la contraseña, guárdela en el archivo. Luego, cuando quieras comparar, hash la entrada y compárala con la contraseña guardada. Por supuesto, esto no es muy seguro, y puede entrar en cosas como salting para mayor seguridad.

Si solo quiere encriptar y desencriptar una cadena que está almacenada en un archivo, use un cipher. Eche un vistazo a Botan o Crypto++.

Esto, por supuesto, todo depende de los niveles de seguridad que desee.

1

agrega los datos a la hash criptográfica:

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

Devuelve el valor hash final.

QByteArray string1=hasher.result(); 

Y Main.cpp ejemplo

#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

Sería más fácil de usar QCryptographicHash :: almohadilla (http://doc.qt.nokia.com/latest/qcryptographichash.html#hash). Además, tiene algunas pérdidas de memoria: win (incluyendo todos sus widgets secundarios) y hash nunca serán eliminados. – Job

13

Hay SimpleCrypt aquí: https://wiki.qt.io/Simple_encryption_with_SimpleCrypt y como su nombre sugiere el autor dice que la clase no proporciona cifrado fuerte pero es bastante buena en mi vista.

Puede descargar un ejemplo de trabajo aquí: 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(); 
} 
Cuestiones relacionadas