如何安全存儲用戶密碼医增,在網(wǎng)上已經(jīng)有很多論述了慎皱。對于詳細過程,不再贅述了叶骨,不如在此直接拋出經(jīng)驗茫多。
- 明文存儲的,直接槍斃
- md5存儲的忽刽,蹂躪后再槍斃(五千萬 md5 加密的密碼約等于四千萬明文密碼)
- 使用強哈希算法天揖,md5夺欲,sha1這些都已經(jīng)淘汰了
- 每個密碼必須加鹽
- 必須是隨機鹽,完全不可預(yù)測的那種
值得注意的是今膊,千萬不要自己發(fā)明輪子些阅,另外在 Python 中,應(yīng)當使用 bcrypt
這個第三方庫斑唬。
下面的 Python 代碼市埋,展示了大概的思路
def encrypt(password, salt=None):
"""加密
:param password: bytes類型,務(wù)必轉(zhuǎn)換
"""
if salt is None:
salt = os.urandom(10)
h = hmac.new(salt, password, hashlib.sha256)
return salt + h.digest()
def verify(password, hashed):
"""驗證
:param password: bytes類型恕刘,務(wù)必轉(zhuǎn)換
"""
return encrypt(password, salt=hashed[:10]) == hashed