ハッシュ化された文字列を変数に保存する

ハッシュ化された文字列を変数に保存する

SHA-512 アルゴリズムを使用して文字列をハッシュする必要があります。ソルトもあります。

スクリプトでこれを試しています:

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

ここで、array[3]はパスワード、pass[0]はハッシュアルゴリズム(6)、pass[1]はソルトです。

何が間違っているのでしょうか? シェル スクリプトで SHA512 を実行する他の方法はありますか?

よろしくお願いします!

編集:変数inputHashが空です

答え1

実際には説明していませんが、Perlスクリプト内でシェル変数を使用しようとしているようです。は${array[3]}シェル配列変数 $arrayPerl はこれを認識しないので、${array[3]}Perl スクリプトでは未定義になります。

これを回避するには 2 つの方法があります。まず、最悪ですが、Perl スクリプトで一重引用符の代わりに二重引用符を使用して、シェル変数を展開することができます。

$ 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

関連情報