为了在Linux上创build一个新的用户,我应该给crypt提供什么样的价值?

我正在写一个Perl脚本,它将创build一个新的用户(在Ubuntu上)。

这将需要一个步骤

$encrypted_password = crypt ($password, $salt); system ("useradd -d $home -s /bin/bash -g $group -p $encrypted_password $name"); 

$salt的价值应该是多less? 互联网上的例子似乎使用任意的值,但是如果encryption的密码将被用来testing用户input的内容,那么内核需要用相同的散列值对input进行散列,以便通过比较。

这个网站声称salt是在crypt的输出中编码的,但是这显然是不正确的。

在Perl的输出中

 print crypt("foo", "aa"); print crypt("foo", "aabbcc"); print crypt("foo", "aa1kjhg23gh43jhgk32kh325423g"); print crypt("foo", "abbbcc"); 

 aaKNIEDOaueR6 aaKNIEDOaueR6 aaKNIEDOaueR6 abQ9KY.KfrYrc 

除了来自不同的盐的相同的哈希,这是可疑的,似乎只有盐的前两个字符被使用。 从安全的angular度来看,这是没有意义的。 此外,输出的格式不符合上述链接的要求。

那么在为useraddencryption密码时,我应该使用什么值的salt?

所有有关crypt的信息都在perldoc -f crypt中 。

这是回答你的问题的部分:

当选择一个新盐时,创建一个随机的两个字符串,其字符来自集合[./0-9A-Za-z](如连接'',('。','/',0..9,'A '''Z','a'..'z')[rand 64,rand 64])。 这组字符只是一个建议, salt中允许的字符完全取决于你的系统的crypt库,Perl不能限制crypt()接受的东西。

我希望这有帮助。