データベースにユーザー名とパスワードを保存しようとしていて、それを行う最も安全な方法は何なのか疑問に思っています。どこかでソルトを使用する必要があることは知っていますが、ソルトを安全に生成する方法やパスワードを暗号化するために適用する方法はわかりません。いくつかのサンプルPythonコードは大歓迎です。ありがとう。
Passlibのようなパスワードのハッシュ専用のパッケージを使用するのが最善だと思います: http://packages.python.org/passlib/ ここで説明した理由により: https: //stackoverflow.com/a/10948614/893857
私はここでこれに答えました: https://stackoverflow.com/a/18488878/1661689 、そして@Koffieもそうでした。
受け入れられた答えが安全でないほど十分に強調する方法がわかりません。プレーンテキストよりも優れており、無塩ハッシュよりも優れていますが、それでも極端に脆弱は辞書攻撃やブルートフォース攻撃に対してもです。代わりにSlow KDFを使用 bcryptのように(または少なくとも10,000回の反復でPBKDF2)
アプリケーションの両方のエンドポイントを十分に制御できる場合、絶対的な最良の方法は PAK-Z + を使用することです。
(編集:元のバージョンを推奨 [〜#〜] srp [〜#〜] しかし、PAK-Z +にはセキュリティの証拠があります。)
8を超える長さのパスワードが問題にならない場合、(effbotから取得した)より簡単な方法を以下に示します。
import crypt
import random, string
def getsalt(chars = string.letters + string.digits):
# generate a random 2-character 'salt'
return random.choice(chars) + random.choice(chars)
パスワードを生成するため:
crypt.crypt("password", getsalt())
*:8文字を超える長さのパスワードは、右から8文字まで削除されます