我正在尝试使用Botan库来创建几个QString的SHA-256哈希-密码和盐。我做了很多尝试,试图将连接的salt + password设置为正确的类型,以输入到Botan流程函数中。我尝试在Botan中使用的类的文档位于botan sha-256 documentation,我最近的尝试是

///
/// Computes salted data hash
///

QByteArray MyClass::HashData(QString salt, QString password)
{
    QString concatenated = salt+password;
    QByteArray input(concatenated.toLocal8Bit());
    Botan::SHA_256 sha;
    Botan::SecureVector<Botan::byte> saltedHash
            = sha.process(&input,input.count()-1);  // -1 to get rid of the \0
    return QByteArray(saltedHash);
}


编译时收到错误消息:没有匹配的函数可以调用'Botan :: SHA_256 :: process(QByteArray *,int)'...候选对象是:/usr/include/botan-1.10/botan/buf_comp.h: 101:Botan :: SecureVector Botan :: Buffered_Computation :: process(常量字节*,size_t)

如何将QString或QByteArray强制转换或复制到const字节*?

编辑:我发布问题后,我尝试了一些其他方法。下面显示了一个似乎可行的方法,但是使用reinterpret_cast很不舒服,因为它看起来像是可能会导致我在c ++ noob状态下不知道的问题。

Botan::SecureVector<Botan::byte>  MyClass::HashData(QString salt, QString password)
{
    QString concatenated = salt+password;
    QByteArray buffer(concatenated.toLocal8Bit());
    unsigned char * input = reinterpret_cast< unsigned char*>(buffer.data());

    Botan::SHA_256 sha;
    Botan::SecureVector<Botan::byte> saltedHash
            = sha.process(input,buffer.count()-1);  // -1 to get rid of the \0
    return (saltedHash);
}

最佳答案

您可以使用以下方法。

const char * QByteArray::data()

10-08 01:54