由于我的系统上没有Perl,我需要使用shell脚本重写Perl脚本。 Perl脚本读取具有用户名和加密密码的文件。 Perl脚本然后比较用户输入的用户名并加密用户输入的密码和读取的文件的内容。
Perl使用crypt
函数进行加密。
crypt(password, salt)
salt =" $ 1 $" + storeRandomNumber +" $ xxxxxxxxxxxxxxxxxxxxxx&#34 ;;
但是在shell脚本的情况下我正在使用
echo $password | openssl enc -aes-128-cbc -a -d -salt -pass pass:wtf
Perl和shell中的加密密码不匹配。请帮我在shell程序中实现匹配的crypt()
函数。仅供参考,我无法修改密码文件。
答案 0 :(得分:1)
Openssl的“enc -aes”用于对称加密字符串,即稍后可以再次解密结果。
Perl的crypt()用于“哈希”密码,如交叉总和或校验和。您无法从结果中获取原始值。您可以检查用户的输入是否产生相同的“校验和”,但要检查它是否(最有可能)是正确的密码。
长话短说,请使用此命令:
echo -n "secret" | openssl passwd -stdin -1 -salt 12345678
$1$12345678$hj0uLpdidjPhbMMZeno8X/
在echo中使用“-n”,或者在密码后面有一个换行符(\ n)。在脚本中,而是使用“openssl -in”从文件中读取。