2013-02-11 159 views
0

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

请给我推荐?

+1

你不应该加密密码,你应该对它们进行散列。 https://docs.djangoproject.com/en/dev/topics/auth/passwords/ – 2013-02-11 07:56:15

+0

阅读此:http://www.tarsnap.com/scrypt/scrypt.pdf – akira 2013-02-11 08:05:43

回答

0

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

(如果你想阅读一些更多的答案,以什么加密方法可能最适合您,看看这个有点关系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 2013-02-11 07:33:42

+0

这是一个很好的观点。你绝对正确的。我的错。 – JohnZ 2013-02-11 07:34:54

+1

base64不是加密,它是一种编码方法。它和纯文本一样糟糕(每个人都可以解码它)。 – Ikke 2013-02-11 07:43:57

2

为了使离线密码开裂更昂贵,你可以使用bcrypt

如果仅限于STDLIB,有crypt module on Unix

hashed = crypt.crypt(plaintext) 
+0

+1 bcrypt是最好的选择。在Django(这是我怀疑作者正在使用,基于他的标签),这被称为[''django.contrib.auth.hashers.BCryptPasswordHasher'](https://docs.djangoproject.com/en/dev/专题/认证/密码/) – 2013-02-11 07:58:46

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) 
1

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

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

如果您使用的是django,请使用django提供的强大算法(通常为bcrypt,pbkdf2,sha512_crypt之一)。

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

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