将散列字符串保存在变量中

将散列字符串保存在变量中

我需要使用 SHA-512 算法对字符串进行哈希处理。我也有盐。

我正在脚本中尝试这样:

inputHash=$( perl -e 'print crypt("${array[3]}","\${pass[0]}\$${pass[1]}\$") . "\n"' )

其中 array[3] 是密码,pass[0] 是哈希算法 (6),pass[1] 是盐。

我究竟做错了什么?还有其他方法可以在 shell 脚本中执行 SHA512 吗?

预先感谢您!

编辑:变量 inputHash 为空

答案1

您实际上并没有解释这一点,但看起来您正在尝试在 Perl 脚本中使用 shell 变量。${array[3]}是第四个元素shell数组变量 $array。 Perl 对此一无所知,因此${array[3]}在 Perl 脚本中未定义。

你有两种方法解决它。首先,也是最糟糕的,您可以在 Perl 脚本中使用双引号而不是单引号,以便扩展 shell 变量:

$ array=("foo" "bar" "baz" "password")
$ pass=("sha512" "randomString")
$ perl -le "print crypt('${array[3]}','${pass[0]}' . '${pass[1]}')"
shY2thr3eF5bs

更好的方法是将变量作为参数传递给 Perl 脚本:

$ perl -le 'print crypt($ARGV[0],$ARGV[1])' "${array[3]}" "${pass[0]}${pass[1]}"
shY2thr3eF5bs

相关内容