0

Botan ライブラリを使用して、パスワードとソルトの 2 つの QString の SHA-256 ハッシュを作成しようとしています。連結されたソルト + パスワードを、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(const byte*, size_t)

QString または QByteArray を const byte* にキャストまたはコピーするにはどうすればよいですか?

編集: 質問を投稿した後、さらにいくつかのアプローチを試しました。動作しているように見えるものを以下に添付しますが、reinterpret_cast を使用すると、C++ 初心者の状態では認識していない問題が発生する可能性があるため、快適ではありません。

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);
}
4

2 に答える 2

1

同じ問題がありました: 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);
...
于 2012-10-12T17:02:09.660 に答える
0

次の方法を使用できます。

const char * QByteArray::data()
于 2012-10-12T03:16:44.793 に答える