Salvando string hash em uma variável

Salvando string hash em uma variável

Preciso fazer o hash de uma string com o algoritmo SHA-512. Eu também tenho um sal.

Estou tentando no script isso:

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

Onde array[3] é a senha, pass[0] é o algoritmo hash (6) e pass[1] é o salt.

O que estou fazendo de errado? Alguma outra maneira de fazer o SHA512 no shell script?

Desde já agradeço!

Editar:A variável inputHash está vazia

Responder1

Na verdade, você não explica isso, mas parece que está tentando usar uma variável shell dentro do script Perl. ${array[3]}é o quarto elemento dovariável de matriz shell $array. Perl não tem conhecimento disso, portanto ${array[3]}é indefinido no script Perl.

Você tem duas maneiras de contornar isso. Primeiro, e pior, você pode usar aspas duplas em vez de aspas simples em seu script Perl para que as variáveis ​​do shell sejam expandidas:

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

Uma maneira muito melhor seria passar as variáveis ​​como argumentos para o seu script Perl:

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

informação relacionada