在Qt5中,我有一个带有QCryptographicHash的代码:
QString pass = "test";
QString hash = QString(QCryptographicHash::hash(pass.toLatin1(),QCryptographicHash::Md5).toHex());
qDebug() << hash;
结果:
098f6bcd4621d373cade4e832627b4f6
如果我使用bash和mkpasswd:
echo test | mkpasswd -s -5
结果:
$ 1 $ xCs.somY $ b / VXeBeO9DZbqCR / 31iPT1
我需要与#2结果相同的哈希,但是在Qt中我在做什么错呢?我需要Qt中的密码哈希。
最佳答案
要使用C ++ / Qt复制mkpasswd
的行为,您需要弄清楚它的实际作用。它不对字符串的MD5结果进行十六进制编码,它的作用更为复杂。
我从mkpasswd的手册页开始,发现它是crypt的前端。那么,地穴做什么呢?
好的输出在$id$salt$encrypted
的from中,其中id = 1表示MD5,然后您将盐与输入以某种方式组合在一起,最后得到的输出就是输入+盐组合的MD5。
根据手册,使用的字母几乎是base64,用.
代替+
。
关于c++ - Qt和mkpasswd MD5哈希值差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49776646/