[英]Recover a salted and hashed password in python
我已經設法使用這種方法對密碼加鹽和哈希:
import hashlib, uuid
salt = uuid.uuid4().hex
hashed_password = hashlib.sha512(password + salt).hexdigest()
如何恢復該過程以恢復實際密碼?
更新:您應該從用戶那里獲得密碼,對他們的密碼應用相同的salt和hash方法,然后將其與原始的salt / hash密碼進行比較,以查看它們是否匹配。 這是很合理的。
你不知道 哈希是一種僅是一種方法的技術。 這就是散列的全部要點。
如果您在數據庫中泄漏了信息,則永遠不會存儲原始密碼來保護用戶。
如果要實現一些“密碼恢復”過程,則需要像每個人一樣進行操作,向具有臨時鏈接的人員發送電子郵件,以在發送隨機生成的新密碼時重置密碼。
哈希是一種方法,因為您只能加密(例如)一個字符串,然后將用戶提供的哈希與您的應用程序生成的哈希進行比較。
但是,這里有一個簡單的crypt ,它可能是您想要“ 2向”散列的內容。
好問題。
首先,永遠不要以明文形式向用戶發送密碼!
由於某些原因,它被認為是不良的安全做法。
如果任何人都可以訪問用戶的電子郵件帳戶(gmail等),則他們擁有密碼並可以劫持該用戶帳戶。
其次,哈希是一種單向加密形式,您可以將密碼變成亂碼。 散列的最大價值在於,每次都會將相同的密碼轉換成相同的亂碼。 這意味着您無需存儲原始密碼即可進行密碼匹配。 您應該散列密碼而不執行像AES-256這樣的2通道加密的原因是2通道加密需要創建,管理和保護可能很難的加密密鑰。 對於大多數開發人員而言,散列變得更容易,更安全。
您應該向用戶發送指向安全頁面的鏈接,而不是通過向用戶發送密碼來實現密碼重置的工作,在該頁面中,他們可以使用一次性令牌重置密碼,該令牌在一段時間后會過期。
這樣,即使攻擊者擁有了某人的電子郵件帳戶(gmail等),也只能在有限的時間內造成損害。
有多種方法可以自己完成此工作,但是獲取無需存儲或管理的一次性使用令牌的一種簡單方法是將用戶管理工作轉移到Stormpath之類的微服務中 ,該服務可以處理所有您的用戶管理:密碼重設,密碼存儲,用戶配置文件,身份驗證,加密,哈希等。
例如,如果您想在Flask Web應用程序中實現類似的功能,則可以使用Flask-Stormpath庫,如下所示:
from flask import Flask
from flask.ext.stormpath import StormpathManager
app = Flask(__name__)
app.config['STORMPATH_ENABLE_FORGOT_PASSWORD'] = True
stormpath_manager = StormpathManager(app)
app.listen(3000)
注意 :我在Stormpath工作,但是無論您使用什么,這些規則都適用,並有助於使任何應用程序更安全。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.