(これは、もくちゃんへの返信として、Daniel DiPaolo へのコメントとして始まりました。)
パスワードを (場所に関係なく) 保存する場合は、次のスキームを使用します。
$hashedPassword = $salt . ハッシュ ( $salt . $password);
ハッシュされたパスワードの保存場所は安全でなければなりません。適切な権限が設定されたデータベースまたはファイル内にある必要があります。
ファイルの場合、パスワードシークレットを持つユーザーbobの「レコード」は次のようになります (BCrypt Hash を使用):
bob:$2a$05$tlk4M8WSpVkO7ER6QGxcwuY91MrBCQn.TCDZ5eOM1iz2sCChtR62K
パスワードを「解読」する方法はありません。これがハッシュ アルゴリズムを使用するポイントです。元に戻すことはできません。
あなたは次のように述べています:
md5 と sha1 を解読しようとするツールがいくつかあり、少なくともいくつかのケースでは機能しているようです
ハッシュ アルゴリズムは元に戻せないため、これは不可能です。(「復号化」オプションはありません)
私の推測では、事前に計算されたテーブルからハッシュを検索し、パスワードである可能性が高い有効な入力文字列を返したツールについて言及していると思われます。
これらのテーブルは、レインボー テーブルと呼ばれます。A)ランダムなソルトを使用し、B) 強力なハッシュ アルゴリズム (BCrypt ハッシュまたは SHA2 ファミリ ハッシュなど)を使用することで、それらを打ち負かすことができます。
不適切なハッシュ アルゴリズムについて: MD5 と SHA1 は暗号的に壊れていると見なされます。言い換えれば、それらをもう使用するべきではありません。
これに関する議論については、https ://stackoverflow.com/questions/2768248/is-md5-really-that-bad を参照してください。