2013-02-11 153 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/