我一直在尝试使用Qt加密库并遇到了麻烦。 Qt(QCryptographicHash)附带的那些工作得很好但只支持 像md5和SHA1这样不安全的哈希方案,例如没有SHA256。
我发现Qt加密体系结构(QCA)具有更多功能。 我从Delta XMPP Project站点获得了库。 http://delta.affinix.com/qca/
QCA库的链接是http://delta.affinix.com/download/qca/2.0/qca-2.0.3.tar.bz2
这是QCA Libary的最新版本。
说明如下。
安装QCA
QCA要求Qt 4.2或更高版本。
对于Windows:
配置
nmake(或make)
installwin
使用最新的Qt一切。除了这个库,Qt中的一切都很好用。 我使用的是Windows XP。 我按照安装说明操作,没有错误。
问题是当我尝试使用与QCA库有关的任何代码时出错。我真的很感激能让这个lib工作的任何帮助。
这是我的代码。
项目文件。
#-------------------------------------------------
#
# 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
答案 0 :(得分:0)
看起来错误的原因是您获得了MemoryRegion
shaHash.final()
,并尝试将其填入QByteArray
。尝试在.toByteArray()
电话后添加final()
。见http://delta.affinix.com/docs/qca/classQCA_1_1MemoryRegion.html
使用QCA(及其维护状态)是否有意义我不知道。
答案 1 :(得分:0)
如果您要从源代码编译Qt
,可以尝试使用此merge request
集成了Aaron Gifford BSD许可的SHA-256,SHA-384和SHA-512 功能与原始SHA-1和MD-5类似。
我自己没有尝试过,但代码似乎没问题,而且我可以告诉它,它将包含在以后的版本中。
答案 2 :(得分:0)
以下将删除错误。
QByteArray hashResult = hash.final().toByteArray();