Преобразование QString в const byte*

Я пытаюсь использовать библиотеку Botan для создания хэша SHA-256 пары QStrings - пароля и соли. Я предпринял много попыток, пытаясь преобразовать объединенную соль + пароль в правильный тип для ввода в функцию процесса Botan. Документацию по классу, который я пытаюсь использовать в Botan, можно найти в документация botan sha-256 Моя последняя попытка

///
/// 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(const byte*, size_t)

Как преобразовать или скопировать QString или QByteArray в константный байт*?

EDIT: После того, как я опубликовал вопрос, я попробовал еще несколько подходов. Тот, который, кажется, работает, прикреплен ниже, но мне неудобно использовать 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);
}

person DarwinIcesurfer    schedule 12.10.2012    source источник
comment
Ваше приведение должно быть в порядке, потому что buffer.data() возвращает char* для представления символов (не может быть отрицательным значением). В этом случае обычный char и беззнаковый char — это одно и то же. stackoverflow.com/questions/2054939 /   -  person Lwin Htoo Ko    schedule 12.10.2012


Ответы (2)


Вы можете использовать следующий метод.

const char * QByteArray::data()
person Lwin Htoo Ko    schedule 12.10.2012
comment
Если я заменю строку на const unsigned char * input = const unsigned char * buffer::data();, компилятор вернет ошибку «конфликтующее объявление» const unsigned char* input. (Обратите внимание, что требуется беззнаковый символ.) - person DarwinIcesurfer; 12.10.2012

Была такая же проблема: 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);
...
person tro    schedule 12.10.2012
comment
Я читал множество статей, в которых говорится, что приведение переинтерпретации С++ предпочтительнее приведения типа c. - person DarwinIcesurfer; 16.10.2012