为什么QCA没有回复我的以下计划

时间:2012-08-11 18:13:26

标签: qt encryption hash

我已经花了很多时间在Windows中配置QCA,但它仍然没有告诉我它的工作,也没有找到任何线索来弄清楚这里发生了什么。 到目前为止我得到的唯一消息是:无法获得劣质的句柄:参数不正确。 这是什么意思?

请告诉我这方面......这是我的代码。

专业档案:

QT       += core
QT       -= gui
TARGET = untitled
CONFIG   += console
CONFIG   -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH += "C:/Qt/hash/qca-2.0.3/include"
LIBS += "C:/Qt/hash/qca-2.0.3/lib/qca2.dll"

源文件:

 #include <QtCrypto/QtCrypto>

 #include <QCoreApplication>
 #include <QDebug>
 #include <stdio.h>

 int main(int argc, char **argv)
 {


// the Initializer object sets things up, and
    // also does cleanup when it goes out of scope
    QCA::Initializer init;


    QCoreApplication app(argc, argv);

    // we use the first argument if provided, or
    // use "hello" if no arguments
    QCA::SecureArray arg = (argc >= 2) ? argv[1] : "hello";

    // must always check that an algorithm is supported before using it
    if( !QCA::isSupported("sha1") )
            printf("SHA1 not supported!\n");
    else {
            // this shows the "all in one" approach
            QString result = QCA::Hash("sha1").hashToString(arg);
            printf("sha1(\"%s\") = [%s]\n", arg.data(), result.toAscii().data());
    }

    // must always check that an algorithm is supported before using it
    if( !QCA::isSupported("md5") )
            printf("MD5 not supported!\n");
    else {
            // this shows the incremental approach. Naturally
            // for this simple job, we could use the "all in one"
            // approach - this is an example, after all :-)
            QCA::SecureArray part1(arg.toByteArray().left(3)); // three chars - "hel"
            QCA::SecureArray part2(arg.toByteArray().mid(3)); // the rest - "lo"

            // create the required object.
            QCA::Hash hashObject("md5");
            // we split it into two parts to show incremental update
            hashObject.update(part1);
            hashObject.update(part2);
            // no more updates after calling final.
            QCA::SecureArray resultArray = hashObject.final();
            // convert the result into printable hexadecimal.
            QString result = QCA::arrayToHex(resultArray.toByteArray());
            printf("md5(\"%s\") = [%s]\n", arg.data(), result.toAscii().data());
       }
    qDebug()<<"Qca is working fine";
    return 0;
     }

1 个答案:

答案 0 :(得分:1)

在.pro文件中,LIBS变量应包含编译器参数,而不仅仅是路径。库的编译器参数是-L<librarypath>-l<libraryname>,在您的情况下我猜这行必须是:

LIBS += -LC:/Qt/hash/qca-2.0.3/lib -lqca2