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