Centos crypt()使用带有`+`

Centos crypt()使用带有`+`,centos,passwords,crypt,Centos,Passwords,Crypt,为什么crypt在CentOS 8的salt中出现+问题 CentOS 7: [root@localhost map]# perl -e 'print crypt("testpwd","\$6\$M9aZENv5Gm71Y+cwUyaUOcSp\$") . "\n"' [root@localhost map]# 首先在CentOS 7机器上创建一个salt: [root@localhost map]# /usr/bin/head -

为什么crypt在CentOS 8的salt中出现
+
问题

CentOS 7:

[root@localhost map]# perl -e 'print crypt("testpwd","\$6\$M9aZENv5Gm71Y+cwUyaUOcSp\$") . "\n"'

[root@localhost map]#
首先在CentOS 7机器上创建一个salt:

[root@localhost map]# /usr/bin/head -c18 /dev/urandom | /usr/bin/openssl base64
M9aZENv5Gm71Y+cwUyaUOcSp
注意盐中的
+

更新的盐计算:
cat/dev/uradom | tr-dc'a-zA-Z0-9./'| head-c16
->crypt()字符集

$6$M9aZENv5Gm71Y+cw$LBRLY1IpcFLA.GNBE0V4NKBP8QG40FHFGFV1RIW/U4wTvthNX/NVHEKSXZICXMKSOZLV3UKFEICRXTP26363/

CentOS 8:

[root@localhost map]# perl -e 'print crypt("testpwd","\$6\$M9aZENv5Gm71Y+cwUyaUOcSp\$") . "\n"'

[root@localhost map]#
因此,它在CentOS 8上返回
NULL
。我猜想
+
在使用
crypt()的salt中不再有效
如果您从盐中除去
+
,它就会起作用。这里发生了什么,还有其他不好的盐焦吗

更新

我找到了这篇文章,其中谈到:

如果您只想知道密码是如何编码的,crypt()将使用特殊的Base64编码类型。因为我使用的是Base64而不是crypt()字符集,“+”把事情搞砸了,因为它在crypt字符集中无效。仍然不确定为什么CentOS 7和CentOS 8允许使用此选项

Base64编码使用以下字符集:
abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyzo123456789+//code>

crypt()编码使用以下字符集:
/0123456789abcdefghijklmnopqrstuvwxyzabefghijklmnopqrstuvwxyz

因此,我现在将使用它为密码创建一个合适的salt,使用
tr
包含
crypt()
charset中的字符

cat/dev/urandom | tr-dc'a-zA-Z0-9./|头部-c16

ayHTWqcZIT1h.LLg


谢谢你,扎克

我在大学里学习了salt,从那以后,我一直假设salt总是
0-9A-Za-z
而不管操作系统、语言等——我的理解是“标准操作程序”——大学是很久以前的事了。。所以我可能错了,萝莉,看来是这样的……哦!!我想我需要类似于
cat/dev/uradom | tr-dc'a-zA-Z0-9'| head-c16
的东西来生成没有坏炭的盐。我想知道为什么CentOS 7没有对此抱怨?