无法将QtC++代码中的md5哈希值与sqlite数据库进行比较。

问题描述 投票:0回答:1

我在sqlite中有一个表,它的PWD字段是一个varchar。每一个密码都以十六进制的方式存储在哈希值中。

在我的C++代码中,我使用下面的函数来计算哈希值。

QString md5(const QString &input)
{
    QByteArray hash = QCryptographicHash::hash(input.toStdString().data(),QCryptographicHash::Md5);
    return QString(hash.toHex());
}

另一方面,我已经在我的表中存储了一个 "根 "密码 通过使用sql函数 md5('root') 这只是一个例子)。

我的目标是通过我的c++代码,在密码是'root'的地方登录。

QSqlQuery query;
query.setForwardOnly(true);
query.prepare("SELECT * from USER WHERE NAME = :name and PWD = :pwd");
query.bindValue(":name",name);
query.bindValue(":pwd",pwd);
query.exec();

这个查询的结果是空的 我发现是我的哈希造成了这个问题。

然而字符串的表达方式在c++和sql中是一样的。当我在sqlitestudio中使用c++字符串哈希表示时,它返回空结果。

C++ code: md5("root") => "63a9f0ea7bb98050796b649e85481845"
Sql: select md5('root') => "63a9f0ea7bb98050796b649e85481845"

所以我的问题是为什么我的c++字符串哈希表示不能与我的字段中存储的值进行比较?

EDIT

为了使我的应用程序能够正常工作,我更新了表中的所有PWD字段,以存储从我的C++代码中创建的md5哈希。

但是将C++中的md5比较成sql中的md5的主要问题仍然没有解决。

c++ sqlite qt md5
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.