0

我只是在 python 中创建一个新的应用程序进行注册。我保存了数据库中的所有字段,并且成功创建了用户,但密码保存与我们在注册时填写的相同。如何加密或使用 python 的默认功能作为密码。

请建议我?

4

5 回答 5

2

要使离线密码破解更加昂贵,您可以使用bcrypt

如果您仅限于 stdlib,则cryptUnix 上有模块

hashed = crypt.crypt(plaintext)
于 2013-02-11T07:52:59.857 回答
1

您应该对密码进行哈希处理,以下代码根据您在 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)
于 2013-02-15T22:32:56.203 回答
1

不要自己实现这些东西,否则你可能会做错。

对于密码存储,使用一些可逆编码或对称加密或来自 hashlib 的简单哈希甚至是随机加盐的哈希都是当今的主要失败。

如果您使用的是 django,请使用 django 提供的一些强算法(通常是以下之一:bcrypt、pbkdf2、sha512_crypt)。

不使用 django 时:使用 passlib - 阅读其文档后。

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

于 2013-02-24T17:02:50.040 回答
0

对于实际加密,您可以尝试M2CryptoPyCrypto。这些可能是您正在寻找的;但是,还有其他方法可以为普通用户混淆密码:

(如果您想阅读更多关于哪种加密方法最适合您的答案,请查看此相关的 SO 帖子:推荐的 Python 加密模块?

hashlib将提供各种哈希算法(例如“SHA1、SHA224、SHA256、SHA384 和 SHA512”)。一个简单的例子:

import hashlib
enc = hashlib.md5()
enc.update("Somerandompassword")
print enc.hexdigest()

这将为您打印 md5 “Somerandompassword”: c5532f9e756b4583db4c627c8aa7d303

但是,对于 (base64) encoding,例如,尝试:

import base64
enc = base64.b64encode("Somerandompassword")

解码

dec = base64.b64decode("U29tZXJhbmRvbXBhc3N3b3Jk")
print dec

将打印:Somerandompassword

于 2013-02-11T07:29:27.200 回答
0

在从用户处(以及注册时)获取密码时对密码进行散列以对其进行加密。

import hashlib
m = hashlib.sha1()
m.update("My users' password here")
m.digest()

参考:http ://docs.python.org/2/library/hashlib.html#module-hashlib

于 2013-02-11T07:26:20.737 回答