3

我在 Windows 7 上使用 Qt 4.8.1、MinGW 编译器和 Qt Creator。我想在我的项目中添加一个加密/解密库。在网上搜索了几天后,我找到了QCA。幸运的是,我找到了一个使用我正在使用的相同 C++ 编译器的预构建版本,以及所需插件预构建版本。我按照说明将 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;
}

代码编译得很好,但是当我运行应用程序时,由于未知原因而停止。

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

4

1 回答 1

3

对于可能会陷入困境的未来程序员

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

您可以通过调用来检查是否是问题所在qDebug() << QCA::supportedFeatures();。如果插件没有被加载,你会得到类似的东西:

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

您应该能够通过调用以下命令查看 QCA 正在查找的文件夹:

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

显然,插件必须放在cryptolibs 根目录中的一个子目录中。

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

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

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

于 2015-06-18T09:12:15.497 回答