Qt和mkpasswd MD5哈希差异

时间:2018-04-11 13:37:44

标签: c++ bash qt

  1. 在Qt5中,我有一个QCryptographicHash的代码:

    echo test | mkpasswd -s -5
    
  2. 结果:

      

    098f6bcd4621d373cade4e832627b4f6

    1. 如果我使用bash和mkpasswd:

      f1,f2,f3,     label
      6,7,8,          0
      1.1,2.1,3.1,    0
      9,10,11,        0
      
    2. 结果:

        

      $ 1 $ $ xCs.somY B / VXeBeO9DZbqCR / 31iPT1

      我需要哈希与#2结果相同,但在Qt我做错了什么?我需要在Qt中使用密码哈希。

3 个答案:

答案 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 $盐散列”

其中:

  • $ id是哈希算法。 $ 1 $代表MD5
  • $ salt是随机盐
  • $ hashed是实际的哈希值。

有关详细信息,请查看crypt手册页。