在Qt5中,我有一个QCryptographicHash的代码:
echo test | mkpasswd -s -5
结果:
098f6bcd4621d373cade4e832627b4f6
如果我使用bash和mkpasswd:
f1,f2,f3, label
6,7,8, 0
1.1,2.1,3.1, 0
9,10,11, 0
结果:
$ 1 $ $ xCs.somY B / VXeBeO9DZbqCR / 31iPT1
我需要哈希与#2结果相同,但在Qt我做错了什么?我需要在Qt中使用密码哈希。
答案 0 :(得分:3)
要使用C ++ / Qt复制mkpasswd
的行为,您需要弄清楚它实际上做了什么。它不会对字符串的MD5结果进行十六进制编码,它的作用会更复杂。
我从mkpasswd的手册页开始,发现它是crypt的前端。那么crypt会做什么呢?
输出是从$id$salt$encrypted
开始的,其中id = 1表示MD5然后你有盐,它以某种方式与输入结合在一起,最后有输出,这是来自MD5的输入+盐组合。
根据手册,使用的字母几乎是base64,而.
代替+
。
答案 1 :(得分:2)
你可以在Qt发出这个bash命令时复制你正在做的事情:
echo -n test | md5sum
注意-n
选项,以禁止换行。
据我所知,mkpasswd
并非旨在加密现有密码,而是随机生成新密码。
答案 2 :(得分:2)
据我所知,您希望为GNU / Linux生成密码哈希。
然后你应该检查/ etc / shadow文件中存储的密码的格式。 不只是密码的MD5哈希值。
实际格式为:
“$ $ ID $盐散列”
其中:
有关详细信息,请查看crypt手册页。