我正在写一个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度来看,这是没有意义的。 此外,输出的格式不符合上述链接的要求。
那么在为useradd
encryption密码时,我应该使用什么值的salt?
所有有关crypt
的信息都在perldoc -f crypt中 。
这是回答你的问题的部分:
当选择一个新盐时,创建一个随机的两个字符串,其字符来自集合[./0-9A-Za-z](如连接'',('。','/',0..9,'A '''Z','a'..'z')[rand 64,rand 64])。 这组字符只是一个建议, salt中允许的字符完全取决于你的系统的crypt库,Perl不能限制crypt()接受的东西。
我希望这有帮助。