Я пытаюсь использовать библиотеку 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 (постоянный байт *, размер_t)
Как я могу привести или скопировать QString или QByteArray в константный байт *?
РЕДАКТИРОВАТЬ: После того, как я разместил вопрос, я попробовал еще несколько подходов. Тот, который работает, прикреплен ниже, но мне неудобно использовать 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()
Были такие же проблемы: QByteArray конвертировать в / из 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); ...