2013-02-11 3 views
0

Я просто создаю новое приложение в python для регистрации. Я сохраняю все поля в базе данных и успешно создан пользователем, но пароль сохраняется так же, как он заполняется во время регистрации. Как шифровать или использовать функциональность по умолчанию для python для пароля.шифрование паролей на python?

Просьба предложить мне?

+1

Вы не должны шифровать пароли, вы должны хэширования их. https://docs.djangoproject.com/ru/dev/topics/auth/passwords/ –

+0

читайте это: http://www.tarsnap.com/scrypt/scrypt.pdf – akira

ответ

0

Для фактического шифрования, вы можете попробовать M2Crypto или PyCrypto. Вероятно, это то, что вы ищете; Однако, существует и другие способы, чтобы запутать ваши пароли для пользователя среднего:

(если вы хотите прочитать еще несколько ответов относительно того, что метод шифрования может подойдут вам лучше всего, проверить это несколько связанного SO сообщения: Recommended Python cryptographic module?

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

+0

md5 не является методом шифрования, а хешем метод. И он не может быть расшифрован (это весь смысл). Помимо этого, md5 больше не подходит для хэширования паролей, используйте для этого что-то более сильное. – Ikke

+0

Это очень хороший момент. Ты определенно прав. Моя вина. – JohnZ

+1

base64 не шифрует, это метод кодирования. Это так же плохо, как простой текст (каждый может его декодировать). – Ikke

2

Чтобы сделать автономный пароль взломать более дорогие, вы можете использовать bcrypt.

Если вы ограничены STDLIB, есть crypt module on Unix:

hashed = crypt.crypt(plaintext) 
+0

+1 bcrypt is лучший вариант. В Django (это то, что я подозреваю, автор использует, основываясь на его тегах), это называется ['django.contrib.auth.hashers.BCryptPasswordHasher'] (https://docs.djangoproject.com/en/dev/ темы/аутентификации/пароли /) –

1

вы должны хэшировании паролей, следующий код хэши необработанного-вход пароля в соответствии с вашим PASSWORD_HASHERS в settings.py

from django.contrib.auth.hashers import make_password 
pass = make_password(raw_pass) # hashing is done here 
user.set_password(pass) 
1

Не используйте такие вещи самостоятельно, иначе вы, вероятно, сделаете это неправильно.

Для хранения паролей с использованием некоторого обратимого кодирования или симметричного шифрования или простого хэша из hashlib или даже случайно соленого хэша все основные ошибки в настоящее время.

Если вы используете django, используйте некоторый сильный алгоритм, предоставляемый django (обычно один из: bcrypt, pbkdf2, sha512_crypt).

Когда не используется django: используйте passlib - после прочтения его документации.

http://code.google.com/p/passlib/

Смежные вопросы