Qt密码哈希

时间:2011-11-14 20:47:16

标签: qt

我一直在尝试使用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 

3 个答案:

答案 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();
相关问题