【问题标题】:Replace Perl script using shell script使用 shell 脚本替换 Perl 脚本
【发布时间】:2015-04-11 08:19:40
【问题描述】:

由于我的系统上没有 Perl,我需要使用 shell 脚本重写 Perl 脚本。 Perl 脚本读取具有用户名和加密密码的文件。 Perl 脚本然后比较用户输入的用户名并将用户输入的密码与读取的文件内容进行加密。

Perl 使用crypt 函数进行加密。

crypt(password, salt)

其中盐 = "$1$" +storeRandomNumber+ "$xxxxxxxxxxxxxxxxxxxxxx";

但如果我使用的是 shell 脚本

echo $password | openssl enc -aes-128-cbc -a -d -salt -pass pass:wtf

Perl 和 shell 中的加密密码不匹配。请帮助我在 shell 程序中实现匹配的crypt() 函数。仅供参考,我无法修改密码文件。

【问题讨论】:

  • 我很好奇,什么 Unix 有 openssl 而没有 Perl?

标签: perl shell crypt


【解决方案1】:

Openssl 的“enc -aes”用于对字符串进行对称加密,即结果可以稍后再次解密。

Perl 的 crypt() 用于“散列”密码,例如交叉和或校验和。您无法从结果中获取原始值。您可以检查用户的输入是否产生相同的“校验和”以检查它是否(很可能)是正确的密码。

长话短说,使用这个命令:

   echo -n "secret" | openssl passwd -stdin -1 -salt 12345678
   $1$12345678$hj0uLpdidjPhbMMZeno8X/

在 echo 中使用“-n”,否则密码后面会出现换行符 (\n)。在脚本中,不如使用“openssl -in”来读取文件。

【讨论】: