Сохранение хешированной строки в переменной

Сохранение хешированной строки в переменной

Мне нужно хешировать строку с помощью алгоритма 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]}— это четвертый элементпеременная массива оболочки $array. Perl не имеет об этом сведений, поэтому ${array[3]}не определен в скрипте Perl.

У вас есть два способа обойти это. Первый и худший: вы можете использовать двойные кавычки вместо одинарных в вашем скрипте 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

Связанный контент