ファイルパイプから別のコマンドで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を使用しないでください)しないでください)。 。

答え2

編集するsha256sumの代わりにはるかに良いより強力なものを使用してください。 (ハットのヒント:ユーザーGilles)。 glibccryptルーチンは、少なくとも5000ラウンドの間、sha256を介してソルト処理された文字列を繰り返します。これは、パスワードクラッカーが一致する文字列を見つけるためにより多くのリソース/時間が必要であるという考えです。次の代わりに、ほとんどすべてのシステムでこの技術を使用できます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このバージョンでは、各行が最初のファイルの入力に対応するように出力されます。

関連情報