/etc/shadow
bashスクリプトを使用してファイルにハッシュされたパスワードを生成しようとしています。ユーザーに変数に保存されているパスワードの入力を求められますPSWD
。ファイルからハッシュ値とソルト値を抽出し、それぞれ変数/etc/shadow
とに保存しました。HVAL
SVAL
パスワードとソルトを使用してハッシュされたパスワードを生成するには、次のコマンドを使用する必要があります(引用する):
$ perl -e 'print crypt("password","\$6\$salt\$") . "\n"'
$PSWD
上記のコマンドでは、「password」を変数に、「6」を変数に、$HVAL
「salt」を変数に置き換える必要があります$SVAL
。
上記の変数をエクスポートし、以下のようにperlコマンドで置き換えようとしましたが、完全に混乱しました。
perl -e 'print crypt("$ENV{"PSWD"}","\$$ENV{"HVAL"}\$$ENV{"SVAL"}\$") . "\n"'
どのような修正が行われますか?
ベストアンサー1
問題は二重引用符にあります。ここでは、これらのハッシュキーをそのまま参照する必要はありません。単純識別子。からperldoc perldata
:
実際、中括弧内の単純な識別子は、ハッシュ添え字と同様に文字列に強制変換されます。引用は必要ありません。前の例は次
$days{'Feb'}
のように書くことができ$days{Feb}
、引用符が自動的に想定されます。しかし、下付き文字では、より複雑な内容は式として解釈されます。たとえば、これはではなく$version{2.0}++
同等であることを意味します。$version{2}++
$version{'2.0'}++
だから:
perl -le 'print crypt($ENV{PSWD},"\$$ENV{HVAL}\$$ENV{SVAL}\$")'
バックティック内で使用する場合は、次のようにバックスラッシュを2倍にする必要があります。
var=`perl -le 'print crypt($ENV{PSWD},"\\$$ENV{HVAL}\\$$ENV{SVAL}\$")'`
$(...)
コマンド置換を使用するのが最善です。
var=$(perl -le 'print crypt($ENV{PSWD},"\$$ENV{HVAL}\$$ENV{SVAL}\$")')