背景

背景

背景

  • 作为实验,我通过手动创建条目来添加新用户(作为 root 用户)/etc/passwdopenssl特别是对我使用的密码进行哈希处理,OpenSSL 1.1.1g但不同版本的结果应该是相同的。

  • 我注意到每次对字符串“ testing”进行哈希处理时,我都会得到不同的结果。
    # openssl passwd testing YY9E0oGqqamCM # openssl passwd testing csL9dpD2Iy3H2

  • 然后我将两个哈希值添加到/etc/passwd文件中,如下所示:
    # echo "root2:YY9E0oGqqamCM:0:0:root:/root:/bin/bash" >> /etc/passwd # echo "root3:csL9dpD2Iy3H2:0:0:root:/root:/bin/bash" >> /etc/passwd

  • 最后,我成功切换到每个用户,尽管他们的哈希值不同:
    $ whoami reguser
    $ su root2 Password: testing
    # whoami root # exit
    $ whoami reguser
    $ su root3 Password: testing
    # whoami root

问题

  • testing即使/etc/passwd文件中的实际哈希值不同, 我如何能够使用相同的密码(即)?
    • 如果有人能够解释幕后发生的事情,使其发挥作用,那就太好了。
      • 我假设字符串“testing”每次被哈希时都会被赋予不同的盐,但是当我输入密码来切换用户时,linux如何知道相应的盐是什么?

答案1

密码哈希值通常是盐腌的。如果您不指定盐,那么它是随机生成的。因此结果不同。盐是输出的一部分:

openssl passwd -salt xx foo
xxY8K1xpBNqPg

openssl passwd -salt xx foo
xxY8K1xpBNqPg

答案2

  • 哈希条目中的前两个字符是盐。openssl passwd必须有一个盐,它总是 2 个字符长,不能多也不能少。

  • YY9E0oGqqamCM因此,在和 的情况下csL9dpD2Iy3H2YYcs是各自的盐。

    $ openssl passwd -salt YY testing
    YY9E0oGqqamCM
    $ openssl passwd -salt cs testing
    csL9dpD2Iy3H2
    

相关内容