在Windows 7上运行QCA(Qt C ++加密库)问题

时间:2012-10-22 20:33:34

标签: c++ qt encryption

我在Windows 7上使用Qt 4.8.1,MinGW编译器和Qt Creator。我想在我的项目中添加加密/解密库。在网上搜索了几天后,我找到了QCA。幸运的是,我找到了一个使用我正在使用的相同C ++编译器的pre-built版本,以及所需的plugins的预构建版本。 我按照instructions将QCA库添加到我的项目中。我使用这样的代码来加密使用AES:

QCA::Initializer init = QCA::Initializer();

//Here where the execution stops
QCA::SymmetricKey key = QCA::SymmetricKey(16);

QCA::InitializationVector iv = QCA::InitializationVector(16);

QCA::Cipher cipher = QCA::Cipher(QString("aes128"), QCA::Cipher::CBC,
                                 QCA::Cipher::DefaultPadding, QCA::Encode,
                                 key, iv);

if (!QCA::isSupported("aes128-cbc-pkcs7"))
{
    qDebug() << "AES128 is not supported";
    return;
}

代码编译得很好但是当我运行应用程序停止时原因不明。

我真的厌倦了这个bug,如果有人可以提供帮助,我将非常感激。

1 个答案:

答案 0 :(得分:2)

对于可能会遇到此问题的未来程序员

QCA在运行时加载插件,所以即使它编译得很好,如果插件不在可搜索的文件夹中,它也不会加载。

您可以致电qDebug() << QCA::supportedFeatures();来检查是否存在问题。如果插件正在加载,您将得到如下内容:

("random", "md5", "sha1", "keystorelist")

您应该可以通过以下方式查看QCA正在查找的文件夹:

qDebug("%s", QCA::pluginDiagnosticText().toUtf8().constData());

显然,插件必须放在libs根目录中名为crypto的子目录中。

您可以使用以下方法检查Qt查找库的所有路径:

qDebug() << QCoreApplication::instance()->libraryPaths();

本文档可能包含一些有用的信息:http://doc.qt.io/qt-4.8/qpluginloader.html