我在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;
}

代码可以很好地编译,但是当我运行应用程序时,原因未知。

如果有人可以帮忙,我真的对这个错误感到厌倦,将不胜感激。

最佳答案

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

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

09-06 16:17