Скрипт для чтения строки за строкой из файла передайте это в другую команду и выведите в другой файл

  1. Если ваш массив называется Info , и вы вычисляете индекс последнего элемента Info , это не так. имеет смысл использовать его для индексации в en (другой массив).
  2. При индексировании массива необходимо использовать фигурные скобки:
    не
     $ en [$ lst] 
    , а
     $  { ru [$ lst] } 
1
15.05.2015, 20:34
2 ответа

Во-первых, ваша непосредственная синтаксическая ошибка: "$ line" - это 6-символьная строка dollar, space, l, i, n, e. Чтобы взять значение переменной line, используйте "$line". Обратите внимание, что если значение -e или -E, echo воспримет его как опцию и ничего не выведет. Чтобы избежать этого, используйте printf %s. Кроме того, обычный read удаляет пробельные символы в начале и конце строки и рассматривает обратные слэши как управляющие символы; чтобы прочитать строку буквально, используйте IFS= read -r.

while IFS= read -r line; do
  printf %s "$line" | …
fi

Не используйте SHA-256 для хэширования паролей. Хотя это лучше, чем обычный текст, это все равно плохо. SHA-256 не является приемлемым способом хэширования паролей, поскольку хэши паролей должны быть солеными и медленными. Подробное объяснение см. в Как безопасно хэшировать пароли?. Вы можете использовать общедоступную утилиту mkpasswd для генерации приличных хэшей паролей; используйте SHA-256 или SHA-512 (несмотря на название, они нормальные, потому что на самом деле они не вычисляют хэш SHA2, а вычисляют итерированный хэш, что приемлемо медленно). Сгенерированный хэш включает случайную соль.

printf %s "$line" | mkpasswd -s -m SHA-512

В своем приложении вызовите системную функцию crypt для проверки этих хэшей. Если используемый вами язык программирования не дает доступа к стандартной библиотечной функции crypt, используйте библиотеку PBKDF2, bcrypt или scrypt, и используйте ее для генерации преобразованных хэшей (опять же, не используйте простой SHA-256 или SHA-512).

4
29.04.2021, 00:28

EDIT Вместо sha256sum, гораздо лучше использовать что-то более надежное. (Шляпная подсказка: пользователь Gilles). Процедура glibc crypt итерирует соленую строку через sha256 минимум 5000 раундов. Идея заключается в том, что это заставляет взломщиков паролей тратить гораздо больше ресурсов/времени на поиск подходящей строки. Вы можете использовать эту технику практически на любой системе, заменив sha256sum:

sha256sum() { 
    read password
    salt=`openssl rand -base64 8`
    perl -le "print crypt('${password}','\$6\$${salt}\$')";
}

Это генерирует 8-символьную соль и передает первую строку ввода и сгенерированную соль через crypt.

Если ваш ввод - это что-то вроде username,password без кавычек или чего-либо еще, вы можете использовать... несколько методов для этого. Один из них:

while IFS=, read username pass ; do 
    /bin/echo -n "$username,"
    echo "$pass" | sha256sum |cut -d' ' -f1
done < input.txt >output.txt

В этой версии ваш вывод теперь username,hash и каждая строка соответствует вводу первого файла.

-1
29.04.2021, 00:28

Теги

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