登録のためにPythonで新しいアプリケーションを作成するだけです。データベースにすべてのフィールドを保存し、ユーザーは正常に作成されましたが、パスワードは登録時に入力したものと同じように保存されます。パスワードにpythonのデフォルト機能を暗号化または使用するにはどうすればよいですか。
私に提案してください?
登録のためにPythonで新しいアプリケーションを作成するだけです。データベースにすべてのフィールドを保存し、ユーザーは正常に作成されましたが、パスワードは登録時に入力したものと同じように保存されます。パスワードにpythonのデフォルト機能を暗号化または使用するにはどうすればよいですか。
私に提案してください?
オフラインのパスワード クラッキングをより高価にするために、 bcryptを使用できます。
stdlib に限定されている場合はcrypt
、Unix にモジュールがあります。
hashed = crypt.crypt(plaintext)
そのようなものを自分で実装しないでください。そうしないと、間違っている可能性があります。
パスワードの保存については、可逆エンコーディングまたは対称暗号化、または hashlib からの単純なハッシュ、さらにはランダムにソルトされたハッシュを使用することは、今日ではすべて主要な失敗です。
django を使用している場合は、django が提供する強力なアルゴリズム (通常は bcrypt、pbkdf2、sha512_crypt のいずれか) を使用してください。
django を使用しない場合: ドキュメントを読んだ後、passlib を使用します。
パスワードをハッシュする必要があります。次のコードは、settings.py の PASSWORD_HASHERS に従って、未加工の入力パスワードをハッシュします。
from django.contrib.auth.hashers import make_password
pass = make_password(raw_pass) # hashing is done here
user.set_password(pass)
実際の暗号化については、M2CryptoまたはPyCryptoを試すことができます。それらはおそらくあなたが探しているものです。ただし、平均的なユーザーのパスワードを難読化する方法は他にもあります。
(どの暗号化方法が最適かについてさらに回答を読みたい場合は、このやや関連性のあるSO投稿:推奨されるPython暗号化モジュールを確認してください。
hashlibは、さまざまなハッシュアルゴリズム(「SHA1、SHA224、SHA256、SHA384、およびSHA512」など)を提供します。簡単な例:
import hashlib
enc = hashlib.md5()
enc.update("Somerandompassword")
print enc.hexdigest()
そしてこれはあなたにmd5「Somerandompassword」を出力します:
c5532f9e756b4583db4c627c8aa7d303
ただし、たとえば(base64)エンコーディングの場合は、次のことを試してください。
import base64
enc = base64.b64encode("Somerandompassword")
とデコード
dec = base64.b64decode("U29tZXJhbmRvbXBhc3N3b3Jk")
print dec
印刷されます:Somerandompassword
ユーザーから(および登録時に)パスワードを取得して暗号化するときに、パスワードをハッシュします。
import hashlib
m = hashlib.sha1()
m.update("My users' password here")
m.digest()
参照:http ://docs.python.org/2/library/hashlib.html#module-hashlib