如何在Qt中简单地对一些字符串(例如密码)进行加密/解密

23

这是我所得到的:

  • Qt SDK 版本 4.6.2
  • Windows XP

问题: 我该如何简单地加密和解密一个 QString 值?我需要将一些加密字符串保存到 INI 文件中,并在重新打开应用程序时将其解密为普通密码字符串值。

备注: 我正在寻找简单,漂亮的解决方案。

谢谢帮助!


1
请看一下qca(http://delta.affinix.com/qca/) - mtvec
验证密码时,您不需要能够再次解密它,因此存储强大(加盐)的哈希值比存储密码本身更好。 - André
3个回答

17

这里有一个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();
}

16
如果你只是想将其用作密码,可以使用 QCryptographicHash。哈希密码并将其保存到文件中。然后当您想要进行比较时,请哈希输入并将其与保存的密码进行比较。当然,这并不是非常安全的,您可以尝试使用盐值来增加安全性。
如果您只想能够加密和解密存储在文件中的字符串,请使用密码。请查看BotanCrypto++
当然,所有这些都取决于您需要的安全级别。

2

将数据添加到加密哈希中:

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();
}

3
使用 QCryptographicHash::hash (http://doc.qt.nokia.com/latest/qcryptographichash.html#hash) 更简单。此外,您有几个内存泄漏:win(包括其所有子小部件)和 hash 永远不会被删除。 - mtvec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接