QString到const字节*转换

时间:2012-10-12 02:36:58

标签: c++ qt botan

我正在尝试使用Botan库来创建几个QStrings的SHA-256哈希 - 密码和盐。我尝试了多次尝试将连接的salt +密码转换为正确的类型以输入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)'的匹配函数... ... candiates是:/usr/include/botan-1.10/botan/buf_comp .h:101:Botan :: SecureVector Botan :: Buffered_Computation :: process(const byte *,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);
}

2 个答案:

答案 0 :(得分:1)

存在同样的问题:QByteArray convert to/from unsigned char *

但是你为什么不使用reinterpret_cast,例如这样:

...
QString salt = "salt";
QString password = "password";
QString concatenated = QString("%1%2").arg(salt).arg(password);
unsigned char * input = (unsigned char *) concatenated. toLocal8Bit().data();
printf("%s", input);
...

答案 1 :(得分:0)

您可以使用以下方法。

const char * QByteArray::data()