2

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

这将需要沿着以下方向迈出一步

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

的值应该$salt是多少?Internet 上的示例似乎使用了任意值,但如果要针对用户输入的内容测试加密密码,则内核需要使用相同的salt 对输入进行哈希处理才能通过比较。

该网站声称盐是在输出中编码的crypt,但这显然不是真的。

在 Perl 中的输出

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

aaKNIEDOaueR6
aaKNIEDOaueR6
aaKNIEDOaueR6
abQ9KY.KfrYrc

除了来自不同盐的相同哈希值(这是可疑的)之外,似乎只使用了盐的前两个字符。从安全的角度来看,这没有意义。此外,输出的格式也不是上面链接中声明的格式。

那么在加密密码时我应该使用什么值的盐useradd呢?

4

1 回答 1

2

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

这是回答您问题的部分:

选择新盐时,创建一个随机的两个字符串,其字符来自集合 [./0-9A-Za-z](如 join '', ('.', '/', 0..9, 'A '..'Z', 'a'..'z')[rand 64, rand 64] )。这组字符只是一个推荐;salt 中允许的字符仅取决于系统的 crypt 库,Perl 无法限制 salts crypt() 接受的内容。

我希望这有帮助。

于 2015-03-20T14:09:37.413 回答