Конкатенация строки md5

У меня есть маленький файл сценария под названием testing.sh, где я прошу пользователя ввести его логин и пароль. Затем пароль зашифровывается с помощью команды md5sum, и результат сохраняется в файле results.txt в форме login:md5password. Однако, когда я просматриваю файл results.txt, я получаю только login:, зашифрованный пароль не конкатенируется.

Вот файл 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:
1
задан 30 November 2017 в 11:43

6 ответов

Вы неправильно выполняете var.

var=$passvar|md5sum

Вы должны отправить "$passvar" в md5sum. Он не будет проходить через трубу | сам по себе, поэтому вам нужно либо использовать echo, либо printf. Это выведет вещи в поток stdout. Вы можете записать это в переменную с подстановкой команд $(...). Другими словами, вы должны делать:

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

Кроме того, не забудьте указать переменные, чтобы сохранить целостность данных, хранящихся в них, и предотвратить разделение слов.

Другие вопросы:

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

Обратите внимание на две вещи здесь: после «вашего пароля» нет новой строки, поэтому вы можете добавить echo после этой команды. Во-вторых, обратите внимание, что md5sum выводит имя файла после вычисленной контрольной суммы md5, которая в этом случае является - или stdin потоком. Возможно, вам захочется избавиться от этой части с помощью любой утилиты обработки текста, которая позволит вам отрезать слова, например awk:

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

. Кроме того, вы можете просто использовать bash s read и here-string <<< (см. word splitting для получения дополнительной информации об этом операторе):

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

И последнее, но не менее важное: ваша строка #! отсутствует / до bin - это должно быть #!/bin/bash.

Полный скрипт должен быть таким:

#!/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

Обратите внимание, что я прокомментировал перенаправление файла, просто для просмотра результатов на терминале для целей тестирования. Вот как это работает:

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

Для дальнейшего использования вы можете добавить set -x после #!/bin/bash (учитывая, что вы правильно определили строку #! конечно), чтобы устранить сценарий и посмотреть, какие команды действительно выполняются, и могут ли возникнуть ошибки. Или просто используйте онлайн-инструмент shellcheck.

3
ответ дан 22 May 2018 в 15:47
  • 1
    @Rockasaurus Очень хорошо! Я рад, что смогу помочь. Счастливые скрипты! – Sergiy Kolodyazhnyy 30 November 2017 в 12:26

Вы неправильно выполняете var.

var=$passvar|md5sum

Вы должны отправить "$passvar" в md5sum. Он не будет проходить через трубу | сам по себе, поэтому вам нужно либо использовать echo, либо printf. Это выведет вещи в поток stdout. Вы можете записать это в переменную с подстановкой команд $(...). Другими словами, вы должны делать:

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

Кроме того, не забудьте указать переменные, чтобы сохранить целостность данных, хранящихся в них, и предотвратить разделение слов.

Другие вопросы:

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

Обратите внимание на две вещи здесь: после «вашего пароля» нет новой строки, поэтому вы можете добавить echo после этой команды. Во-вторых, обратите внимание, что md5sum выводит имя файла после вычисленной контрольной суммы md5, которая в этом случае является - или stdin потоком. Возможно, вам захочется избавиться от этой части с помощью любой утилиты обработки текста, которая позволит вам отрезать слова, например awk:

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

. Кроме того, вы можете просто использовать bash s read и here-string <<< (см. word splitting для получения дополнительной информации об этом операторе):

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

И последнее, но не менее важное: ваша строка #! отсутствует / до bin - это должно быть #!/bin/bash.

Полный скрипт должен быть таким:

#!/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

Обратите внимание, что я прокомментировал перенаправление файла, просто для просмотра результатов на терминале для целей тестирования. Вот как это работает:

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

Для дальнейшего использования вы можете добавить set -x после #!/bin/bash (учитывая, что вы правильно определили строку #! конечно), чтобы устранить сценарий и посмотреть, какие команды действительно выполняются, и могут ли возникнуть ошибки. Или просто используйте онлайн-инструмент shellcheck.

3
ответ дан 18 July 2018 в 02:19

Вы неправильно выполняете var.

var=$passvar|md5sum

Вы должны отправить "$passvar" в md5sum. Он не будет проходить через трубу | сам по себе, поэтому вам нужно либо использовать echo, либо printf. Это выведет вещи в поток stdout. Вы можете записать это в переменную с подстановкой команд $(...). Другими словами, вы должны делать:

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

Кроме того, не забудьте указать переменные, чтобы сохранить целостность данных, хранящихся в них, и предотвратить разделение слов.

Другие вопросы:

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

Обратите внимание на две вещи здесь: после «вашего пароля» нет новой строки, поэтому вы можете добавить echo после этой команды. Во-вторых, обратите внимание, что md5sum выводит имя файла после вычисленной контрольной суммы md5, которая в этом случае является - или stdin потоком. Возможно, вам захочется избавиться от этой части с помощью любой утилиты обработки текста, которая позволит вам отрезать слова, например awk:

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

. Кроме того, вы можете просто использовать bash s read и here-string <<< (см. word splitting для получения дополнительной информации об этом операторе):

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

И последнее, но не менее важное: ваша строка #! отсутствует / до bin - это должно быть #!/bin/bash.

Полный скрипт должен быть таким:

#!/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

Обратите внимание, что я прокомментировал перенаправление файла, просто для просмотра результатов на терминале для целей тестирования. Вот как это работает:

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

Для дальнейшего использования вы можете добавить set -x после #!/bin/bash (учитывая, что вы правильно определили строку #! конечно), чтобы устранить сценарий и посмотреть, какие команды действительно выполняются, и могут ли возникнуть ошибки. Или просто используйте онлайн-инструмент shellcheck.

3
ответ дан 24 July 2018 в 17:31

Следующий сценарий также работает для меня.

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

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

printf "\n"

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

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

Выход

bond@hp-pc:~$ ./test.sh 
Your login:bond
Your password:
bond@hp-pc:~$ cat result.txt 
bond:22c291f0335f869c154d8081854d9119
1
ответ дан 22 May 2018 в 15:47
  • 1
    @SergiyKolodyazhnyy Спасибо за комментарий, я отредактировал свой ответ в соответствии с комментарием. – Rooney 1 December 2017 в 10:58

Следующий сценарий также работает для меня.

#!/bin/bash echo -n 'Your login:' read uservar echo -n 'Your password:' read -s passvar printf "\n" encrpt=$(echo "$passvar" | md5sum | awk '{print $1;}') echo "$uservar":"$encrpt" > /home/bond/result.txt

Выход

bond@hp-pc:~$ ./test.sh Your login:bond Your password: bond@hp-pc:~$ cat result.txt bond:22c291f0335f869c154d8081854d9119
1
ответ дан 18 July 2018 в 02:19

Следующий сценарий также работает для меня.

#!/bin/bash echo -n 'Your login:' read uservar echo -n 'Your password:' read -s passvar printf "\n" encrpt=$(echo "$passvar" | md5sum | awk '{print $1;}') echo "$uservar":"$encrpt" > /home/bond/result.txt

Выход

bond@hp-pc:~$ ./test.sh Your login:bond Your password: bond@hp-pc:~$ cat result.txt bond:22c291f0335f869c154d8081854d9119
1
ответ дан 24 July 2018 в 17:31
  • 1
    @SergiyKolodyazhnyy Спасибо за комментарий, я отредактировал свой ответ в соответствии с комментарием. – Rooney 1 December 2017 в 10:58

Другие вопросы по тегам:

Похожие вопросы: