我今天正在做一个练习,其中包括通过手动编辑 /etc/group ; /etc/shadow ; /etc/passwd 来创建新用户
现在,参考 /etc/shadow,我必须创建密码哈希。我使用了这个 perl 脚本:
#!/usr/bin/perl -w
use strict;
my $pwd = $ARGV[0]
chomp($pwd)
my $salt = join "", (".", "/", 0..9, "A".."Z", "a".."z")[rand 64, rand 64];
print crypt($pwd, $salt)."\n";
这显然每次都会产生随机结果。
当我测试结果时,我发现我只能使用之前创建随机哈希的密码登录。
我的问题是:如果单个脚本获取单个密码并输出不同的哈希值,登录程序如何识别真实密码?
答案1
crypt 方法中使用了 salt。相同的 salt 总是会产生相同的加密密码。但是,salt 是随机的,因此看起来整个加密密码都是随机的。
加密密码中存储有盐,用于检查密码。密码哈希仅以一种方式工作。检查时,从加密密码中读取盐,然后加密密码。如果加密密码与 /etc/shadow 中的密码相同,则密码正确。