
Necesito codificar una cadena con el algoritmo SHA-512. Tengo sal también.
Estoy intentando en el script esto:
inputHash=$( perl -e 'print crypt("${array[3]}","\${pass[0]}\$${pass[1]}\$") . "\n"' )
Donde matriz[3] es la contraseña, paso[0] es el algoritmo hash (6) y paso[1] es la sal.
¿Qué estoy haciendo mal? ¿Alguna otra forma de hacer SHA512 en el script de shell?
¡Gracias de antemano!
Editar:La variable inputHash está vacía
Respuesta1
En realidad, no explica esto, pero parece que está intentando utilizar una variable de shell dentro del script Perl. ${array[3]}
es el cuarto elemento de lavariable de matriz de shell $array
. Perl no tiene conocimiento de esto, por lo que ${array[3]}
no está definido en el script Perl.
Tienes dos formas de evitarlo. En primer lugar, y lo peor, puede utilizar comillas dobles en lugar de comillas simples en su script Perl para expandir las variables del shell:
$ array=("foo" "bar" "baz" "password")
$ pass=("sha512" "randomString")
$ perl -le "print crypt('${array[3]}','${pass[0]}' . '${pass[1]}')"
shY2thr3eF5bs
Una forma mucho mejor sería pasar las variables como argumentos a su script Perl:
$ perl -le 'print crypt($ARGV[0],$ARGV[1])' "${array[3]}" "${pass[0]}${pass[1]}"
shY2thr3eF5bs