SHA-2 のような汎用のハッシュ アルゴリズムをパスワードの保存に使用するべきではありません。ソルトはレインボー テーブルからあなたを守りますが、ブルート フォース攻撃からは守ってくれません。最近では、処理は安価で、クレジット カードを持っている人なら誰でも簡単に利用できます。また、データベースが侵害された場合、ソルトを使用しても、不適切なパスワードを簡単に解読できてしまいます。
パスワードを保存する目的で作成された特定のハッシュ関数があります。違いは、ハッシュを生成するために使用される暗号化アルゴリズムのサイクル数を調整できるため、それを行うのにどれくらいの費用がかかるか、またはどれくらい時間がかかるかです. これにより、はるかに高速なコンピューターが利用可能になった場合でも、ブルート フォース攻撃がはるかに困難になります。
そのうちの 1 つはbcryptで、ここで Python で利用できます。
>>> import bcrypt
>>> h = bcrypt.hashpw('lero', bcrypt.gensalt(10))
>>> j = bcrypt.hashpw('lero', bcrypt.gensalt(12))
>>> h
'$2a$10$FhdV1LfOPfxvHcwbWSZLiupbUL8i.som6GyqWue6VBwVgKK9cZcRi'
>>> j
'$2a$12$bgZ1eFD/VTGWUtA8jhnUcO7JjpIpBRjbNpQ9DcYQvtyQV4XsjAXU6'
>>>
bcrypt.gensalt() の呼び出しは、生成されたハッシュの複雑さを決定します。ご覧のとおり、どちらもハッシュを生成しますが、bcrypt.gensalt(12) を使用した呼び出しの方が時間がかかります。コンピューターが高速になるにつれて、それを増やしてハッシュを時々再生成できるため、ブルート フォース攻撃は効果的ではなくなります。