Skip to content

Linux使用sha512和指定盐生成密码

由于一次非常神奇的需求(使用sha512和指定的盐对密码进行加密)的加固然后就有了这篇东西(

测试环境

Ubuntu 20.04 CentOS 7.9 先生成一个user=moe,passwd=moetest的用户

Linux密码的保存结构

众所周知,Linux的用户密码信息是存放在**/etc/shadow**文件中的。

[root@moe ~]# cat /etc/shadow
moe:$6$8q7ORxjl$iwlWRaRDLbZhgfaIABRXJ.GuDC66sWJdLux1B7j5J/Wbz.Xk8NlNXoht.YpSB7S83ZGfEVZlOb3OMXzVHQu9G0:19062:0:99999:7:::

每行信息被通过 : 划分为9个字段。每个字段的含义如下: 用户名:口令:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段 其中,第二段又被 $ 划分为3个字段,格式为**$id$salt$密文** id字段是加密算法的代号:1为md5,5为SHA256,6为SHA512;(salt)是用于混淆明文的一段字符。 以上面的moe用户为例,可以看出使用了SHA512的加密算法,盐为8q7ORxjl。

使用openssl以上述要求生成口令对比:

[root@moe ~]# openssl passwd -6 -salt 8q7ORxjl moetest
$6$8q7ORxjl$iwlWRaRDLbZhgfaIABRXJ.GuDC66sWJdLux1B7j5J/Wbz.Xk8NlNXoht.YpSB7S83ZGfEVZlOb3OMXzVHQu9G0

可以发现完全一致,那就可以使用openssl来生成指定盐的口令了

使用openssl生成密码

openssl passwd -6 -salt [盐] [密码]

比如以[gooood]为盐,[moe]为密码,生成口令

[root@moe ~]# openssl11 passwd -6 -salt gooood moe
$6$gooood$S4HBrBr0.Mr4jvL1P6bwM8VHjCLsYLg1DzoWzSjPN4yP8n.aGTnBIO62/dHLs/Nu7cdqgJmZ.tHGnil1HlfTu1

然后把生成的口令替换/etc/shadow中对应的字段,再尝试登录,证明可行。