我在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,如果有人可以提供帮助,我将非常感激。
答案 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