3

Qt 4.8.1、MinGWコンパイラ、QtCreatorをすべてWindows7で使用しています。プロジェクトに暗号化/復号化ライブラリを追加したいと思います。数日間ウェブを検索した後、私は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());

cryptoどうやら、プラグインはlibsルートディレクトリで呼び出されるサブディレクトリに配置する必要があります。

以下を使用して、Qtがライブラリを検索するすべてのパスを確認できます。

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

このドキュメントには、いくつかの有用な情報が含まれている可能性があります:http: //doc.qt.io/qt-4.8/qpluginloader.html

于 2015-06-18T09:12:15.497 に答える