HowTo Crypt/Шифровать некоторую строку (например, пароль) на Qt simple
Вот что я получил:
- Qt SDK версии 4.6.2
- Windows XP
Вопрос: как я могу просто шифровать и шифровать простое значение QString? Мне нужно это, чтобы сохранить некоторую зашифрованную строку в INI файле и после повторного открытия приложения зашифровать строку до обычного значения строки пароля.
PS: Я ищу простое и приятное решение.
Спасибо за помощь!
Ответы
Ответ 1
Если вы просто хотите использовать его как пароль, используйте QCryptographicHash
. Хешируйте пароль, сохраните его в файле. Затем, когда вы хотите сравнить, введите хэш и сравните его с сохраненным паролем. Конечно, это не очень безопасно, и вы можете получить такие вещи, как соление для повышения безопасности.
Если вы хотите просто зашифровать и дешифровать строку, хранящуюся в файле, используйте cipher. Взгляните на Botan или Crypto ++.
Это, конечно, все зависит от уровня безопасности, который вы хотите.
Ответ 2
Здесь есть SimpleCrypt: https://wiki.qt.io/Simple_encryption_with_SimpleCrypt, и, как видно из названия, автор говорит, что класс не обеспечивает надежного шифрования, но его довольно хорошо, на мой взгляд.
Здесь вы можете загрузить рабочий пример: 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();
}
Ответ 3
Добавляет данные в криптографический хеш:
QByteArray string = "Nokia";
QCryptographicHash hasher(QCryptographicHash::Sha1);
hasher.addData(string);
Возвращает окончательное значение хэш-функции.
QByteArray string1=hasher.result();
И пример Main.cpp
#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();
}