
Ich muss einen String mit dem SHA-512-Algorithmus hashen. Ich habe auch ein Salt.
Ich versuche im Skript Folgendes:
inputHash=$( perl -e 'print crypt("${array[3]}","\${pass[0]}\$${pass[1]}\$") . "\n"' )
Dabei ist array[3] das Passwort, pass[0] der Hash-Algorithmus (6) und pass[1] das Salt.
Was mache ich falsch? Gibt es andere Möglichkeiten, SHA512 im Shell-Skript auszuführen?
Vielen Dank im Voraus!
Bearbeiten:Die Variable inputHash ist leer
Antwort1
Sie erklären das nicht wirklich, aber es sieht so aus, als würden Sie versuchen, eine Shell-Variable innerhalb des Perl-Skripts zu verwenden. ${array[3]}
ist das vierte Element desShell-Array-Variable $array
. Perl weiß hiervon nichts und ${array[3]}
ist daher im Perl-Skript nicht definiert.
Es gibt zwei Möglichkeiten, das zu umgehen. Erstens, und das ist am schlimmsten, können Sie in Ihrem Perl-Skript doppelte Anführungszeichen statt einfacher Anführungszeichen verwenden, sodass Shell-Variablen erweitert werden:
$ array=("foo" "bar" "baz" "password")
$ pass=("sha512" "randomString")
$ perl -le "print crypt('${array[3]}','${pass[0]}' . '${pass[1]}')"
shY2thr3eF5bs
Eine weitaus bessere Möglichkeit wäre, die Variablen als Argumente an Ihr Perl-Skript zu übergeben:
$ perl -le 'print crypt($ARGV[0],$ARGV[1])' "${array[3]}" "${pass[0]}${pass[1]}"
shY2thr3eF5bs