Генерация sha256 из Bash (без эха)
Я пытаюсь написать базовый сценарий, который проходит через файл строка за строкой, шифрует каждую строку с помощью sha256, а затем сравнивает его с фиксированным тестом на соответствие результатов.
file.txt
foo
bar
bazz
password
мой код:
#!/bin/bash
file="./file.txt"
while IFS='' read -r line || [[ -n "$line" ]] ; do
password="5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
echo "Testing $line: "
try=$line | sha256sum
if [[ "$try" == "$password" ]] ; then
echo "match"
else
echo "no match"
fi
done <"$file"
результат:
testing foo
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -
no match
testing bar
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -
no match
testing bazz
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -
no match
testing password
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -
no match
Я верю try=$line | sha256sum
чтобы быть проблемой здесь, потому что, если я запускаю его сам, используя пример из file.txt
:
foo | sha256sum
foo: command not found
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 -
размещение foo
в "" не меняет результат выше
Единственный способ, которым я смог заставить его правильно обращаться с трубой, - это установить echo
спереди:
echo -n foo | sha256sum
2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae
Это не желаемый результат, так как я не хочу печатать каждую сумму sha256, я просто хочу закодировать строку и затем проверить ее. Если оно совпадает, то выведите совпадение, иначе совпадения нет
Ожидаемые результаты:
testing foo #2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae -
no match
testing bar #fcde2b2edba56bf408601fb721fe9b5c338d10ee429ea04fae5511b68fbf8fb9 -
no match
testing bazz #ef9b462f01f881c97791114d6244476bb33e418d3dbe0ee0967c4c80e764cd9c -
no match
testing password #5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 -
match
1 ответ
Печать линии, чтобы передать ее sha256
не будет печатать его на экране. Однако, если вы хотите захватить вывод sha256
вы захотите использовать подстановку команды вместо того, чтобы просто запустить команду.
Эта строка должна быть:
try="$(printf '%s' "$line" | sha256sum | cut -f1 -d' ')"
Мы будем использовать printf
вместоecho
а затем мы фиксируем stdout
из конвейера и сохранить это в нашей переменной try
, Также, sha256sum
печатает файл, из которого он читал, в том числе stdin
так что мы будем использовать cut
чтобы избавиться от этой части.