Primeiro, seu erro de sintaxe imediata: "$ line"
é a string de dólar de 6 caracteres, espaço, l
, i
, n
, e
. Para obter o valor da variável line
, use "$line"
. Observe que, se o valor for -e
ou -E
, echo
irá analisá-lo como uma opção e não imprimirá nada. Para evitar isso, use printf %s
. Além disso, o% comum read
retira os espaços em branco no início e no final da linha e trata as barras invertidas como caracteres de escape; para ler a linha literalmente, use IFS= read -r
.
while IFS= read -r line; do
printf %s "$line" | …
fi
Não use o SHA-256 para senhas hash. Embora seja melhor que texto simples, ainda é ruim. SHA-256 não é uma maneira aceitável de hash senhas porque hashes de senha devem ser salgados e lentos. Consulte Como colocar senhas hash com segurança? para obter uma explicação detalhada. Você pode usar o utilitário comumente disponível mkpasswd
para gerar hashes de senha decentes; use o SHA-256 ou SHA-512 (apesar de seu nome, eles estão ok porque eles não calculam um hash SHA2, eles calculam um hash iterado, que é aceitavelmente lento). O hash gerado inclui um sal aleatório.
printf %s "$line" | mkpasswd -s -m SHA-512
Em seu aplicativo, chame a função crypt
do sistema para verificar esses hashes. Se a linguagem de programação que você está usando não lhe der acesso à biblioteca padrão crypt
function, use uma biblioteca PBKDF2, bcrypt ou scrypt, e use essa biblioteca para gerar os hashes convertidos também (novamente, não use plain SHA-256 ou SHA-512).