我只是在 python 中创建一个新的应用程序进行注册。我保存了数据库中的所有字段,并且成功创建了用户,但密码保存与我们在注册时填写的相同。如何加密或使用 python 的默认功能作为密码。
请建议我?
我只是在 python 中创建一个新的应用程序进行注册。我保存了数据库中的所有字段,并且成功创建了用户,但密码保存与我们在注册时填写的相同。如何加密或使用 python 的默认功能作为密码。
请建议我?
您应该对密码进行哈希处理,以下代码根据您在 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)
不要自己实现这些东西,否则你可能会做错。
对于密码存储,使用一些可逆编码或对称加密或来自 hashlib 的简单哈希甚至是随机加盐的哈希都是当今的主要失败。
如果您使用的是 django,请使用 django 提供的一些强算法(通常是以下之一:bcrypt、pbkdf2、sha512_crypt)。
不使用 django 时:使用 passlib - 阅读其文档后。
对于实际加密,您可以尝试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) encoding,例如,尝试:
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