【发布时间】:2013-03-05 19:53:20
【问题描述】:
我一直在尝试使用 Qt 加密库并且遇到了问题。 Qt (QCryptographicHash) 附带的那些运行良好,但仅支持 像 md5 和 SHA1 这样不安全的哈希方案,例如没有 SHA256。
我发现 Qt Cryptographic Architecture (QCA) 具有更多功能。 我从 Delta XMPP 项目站点获得了这些库。 http://delta.affinix.com/qca/
QCA 库的链接是http://delta.affinix.com/download/qca/2.0/qca-2.0.3.tar.bz2
这是 QCA 库的最新版本。
说明如下。
安装 QCA
QCA 需要 Qt 4.2 或更高版本。
对于 Windows:
配置
nmake(或制作)
安装win
使用最新的 Qt 一切。除了这个库之外,Qt 中的一切都很好。 我使用 Windows XP。 我按照安装说明进行操作,没有出现任何错误。
问题是当我尝试使用任何与 QCA 库有关的代码时会出错。我非常感谢任何帮助让这个库工作。
这是我的代码。
项目文件。
#-------------------------------------------------
#
# Project created by QtCreator 2011-11-14T14:23:21
#
#-------------------------------------------------
QT += core
QT -= gui
TARGET = kde_crypto2
CONFIG += console
CONFIG -= app_bundle
CONFIG += crypto
TEMPLATE = app
SOURCES += main.cpp
源文件。
#include <QtCore/QCoreApplication>
#include <QTextStream>
#include <QString>
#include <QtCrypto/QtCrypto>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextStream t(stdout);
if(!QCA::isSupported("sha1"))
t << "SHA1 not supported!\n";
else
{
QByteArray fillerString;
fillerString.fill('a', 1000);
QCA::Hash shaHash("sha1");
for (int i=0; i<1000; i++)
shaHash.update(fillerString);
QByteArray hashResult = shaHash.final();
if ( "34aa973cd4c4daa4f61eeb2bdbad27316534016f" == QCA::arrayToHex(hashResult) )
{
t << "big SHA1 is OK\n";
}
else
{
t << "big SHA1 failed\n";
}
}
return a.exec();
}
错误码是
error: conversion from 'QCA::MemoryRegion' to non-scalar type 'QByteArray' requested
编辑(更新) 我在编译库时没有包含 --debug-and-release 标志。使用此标志重新编译库后,我在编译代码时不再出现错误。但是,当我运行我的代码时,只要到达使用 QCA 库的任何行,应用程序就会崩溃。因此,我认为库或安装方式有问题。
运行时的错误码是:
ASSERT: "global" in file qca_core.cpp, line 260
【问题讨论】:
-
我在 QCA 方面也遇到了问题,这似乎是一个无人维护的项目。我建议改为Botan。如果您使用它进行“合并构建”(阅读文档),它将生成一个头文件和一个包含整个库的源文件。如果你想对你的问题有有用的答案,你可能想指定你的确切错误,因为没有人能猜到它:)
标签: qt