ファイルパイプから別のコマンドで1行ずつ読み込み、別のファイルに出力するスクリプト

ファイルパイプから別のコマンドで1行ずつ読み込み、別のファイルに出力するスクリプト

パスワードをプレーンテキストで保存する奇妙な古いアプリをサポートしようとしていますが、これをハッシュしたいと思います。各行にユーザー名とパスワードを含むcsvの入力ファイルが必要ですが、最初はその部分を見つけるまでパスワードを試しています。プレーンテキストパスワードリストを別のファイルにハッシュし、リストを順番に保持しようとしています。私はここを叩いて、while readステートメントを介して行う必要があると思いましたが、うまくいきません。

これが私が今まで得たものです:

#!/bin/bash

while read line
do 
    /bin/echo -n "$ line" | sha256sum >> /tmp/hashes.txt
done < pwd.txt

入力ファイル pwd.txt では、各行は異なるパスワードです。スクリプトで実行するときは、最初のパスワードのハッシュを繰り返し繰り返すだけですが、入力ファイルの行に対して正しい回数だけ繰り返します。何が間違っているのか、それとも良い方法があるのか​​教えてください。

ベストアンサー1

まず、直接構文エラーです。"$ line"6文字の文字列$、space l、、、、、、、。変数の値を取得するには、を使用します。値がまたは場合、オプションで解析され、何も印刷されません。これを防ぐには、代わりに使用してください。また、行を文字通り読み取るには、前後のスペースを削除し、バックスラッシュをエスケープ文字として扱います。ineline"$line"-e-Eechoprintf %sreadIFS= 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を使用しないでください)しないでください)。 。

おすすめ記事