パスワードをプレーンテキストで保存する奇妙な古いアプリをサポートしようとしていますが、これをハッシュしたいと思います。各行にユーザー名とパスワードを含む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
、、、、、、、。変数の値を取得するには、を使用します。値がまたは場合、オプションで解析され、何も印刷されません。これを防ぐには、代わりに使用してください。また、行を文字通り読み取るには、前後のスペースを削除し、バックスラッシュをエスケープ文字として扱います。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を使用しないでください)しないでください)。 。
答え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
このバージョンでは、各行が最初のファイルの入力に対応するように出力されます。