Concatenando string md5

1

Eu tenho um pequeno arquivo de script chamado testing.sh onde estou pedindo ao usuário para digitar seu login e senha. Em seguida, a senha será criptografada com o comando md5sum e o resultado será armazenado em um arquivo results.txt em um formulário login:md5password . No entanto, quando visualizo o arquivo results.txt , recebo apenas login: , a senha criptografada não é concatenada. O que estou fazendo errado?

Aqui está o arquivo testing.sh :

#!bin/bash
read -p 'Your login: ' uservar
read -sp 'Your password: ' passvar

var=$passvar|md5sum
echo $uservar:$var > ~/Desktop/results.txt

results.txt file:

login:
    
por Rockasaurus 30.11.2017 / 08:43

2 respostas

3

Você está fazendo a designação var de maneira errada.

var=$passvar|md5sum

Você deveria enviar "$passvar" para md5sum . Ele não passará pelo pipe | sozinho, então você precisa usar echo ou printf . Isso resultará em coisas para stdout stream. Você pode capturar isso em variável com a substituição de comando $(...) . Em outras palavras, você deveria estar fazendo:

var=$( echo "$passvar" | md5sum )

Além disso, lembre-se de citar as variáveis para preservar a integridade dos dados armazenados nelas e evitar que a divisão de palavras .

Outras questões:

$ read -sp 'Your password:' passvar
Your password:$ var=$( echo "$passvar" | md5sum )
$ echo "$var"
2b00042f7481c7b056c4b410d28f33cf  -

Observe duas coisas aqui: não há nova linha após "Sua senha", então você pode querer adicionar echo após esse comando. Em segundo lugar, observe que md5sum produz o nome do arquivo após a soma de verificação md5 calculada, que nesse caso é - ou stdin stream. Você pode querer considerar livrar-se dessa parte por meio de qualquer utilitário de processamento de texto que permita cortar palavras, como awk :

var=$( echo "$passvar" | md5sum | awk '{print }')

Como alternativa, você pode usar apenas bash da leitura e da string <<< (veja esta para mais informações sobre esse operador):

$ read var trash <<< $( echo "$passvar" | md5sum )
$ echo "$var"
2b00042f7481c7b056c4b410d28f33cf

Por último, mas não menos importante, sua linha #! está faltando / antes de bin - deve ser #!/bin/bash .

O script completo deve ser assim:

#!/bin/bash
read -p 'Your login: ' uservar
read -sp 'Your password: ' passvar
printf "\n"
read var trash <<< "$(printf "%s" "$passvar" | md5sum)"
printf "%s:%s" "$uservar" "$var" #> ~/results.txt

Observe que eu comentei o redirecionamento para o arquivo, apenas para ver a saída no terminal para fins de teste. Veja como funciona:

$ ./testing.sh 
Your login: johndoe
Your password: 
johndoe:912ec803b2ce49e4a541068d495ab570$ 

Para referência futura, você pode adicionar set -x após #!/bin/bash (já que definiu corretamente a linha #! , é claro) para solucionar o script e ver quais comandos realmente são executados e se podem ocorrer erros. Ou use a ferramenta on-line shellcheck .

    
por Sergiy Kolodyazhnyy 30.11.2017 / 08:49
1

O script a seguir também funciona para mim.

#!/bin/bash
echo -n 'Your login:'
read uservar

echo -n 'Your password:'
read -s passvar

printf "\n"

encrpt=$(echo "$passvar" | md5sum | awk '{print ;}')

echo "$uservar":"$encrpt" > /home/bond/result.txt

Resultado

bond@hp-pc:~$ ./test.sh 
Your login:bond
Your password:
bond@hp-pc:~$ cat result.txt 
bond:22c291f0335f869c154d8081854d9119
    
por Rooney 30.11.2017 / 09:41