簡體   English   中英

Python bcrypt:如何檢查由 sha256 加密的長密碼?

[英]Python bcrypt: how to check a long encrypted by sha256 password?

我有一個要編碼的長密碼。 我使用 bcrypt 主教程:

>>> password = b"an incredibly long password" * 10
>>> hashed = bcrypt.hashpw(
...     base64.b64encode(hashlib.sha256(password).digest()),
...     bcrypt.gensalt()
... )

但是,當我使用以下教程檢查時,它不匹配:

input_password = "..." # some password
bcrypt.checkpw(input_password.encode("utf8"), hashed)

我想我也必須解碼它。 base64.b64encode(hashlib.sha256(input_password).digest()應該工作嗎?

對於將來閱讀此內容的任何人:OP是正確的。 BCrypt GitHub

bcrypt 算法只處理最多 72 個字符的密碼,超出的任何字符都將被忽略。 To work around this, a common approach is to hash a password with a cryptographic hash (such as sha256) and then base64 encode it to prevent NULL byte problems before hashing the result with bcrypt:

>>> password = b"an incredibly long password" * 10
>>> hashed = bcrypt.hashpw(
...     base64.b64encode(hashlib.sha256(password).digest()),
...     bcrypt.gensalt()
... )

現在回答這個問題:
是的,要檢查密碼,您可以像以前一樣使用密碼執行相同的步驟,所以

>>> new_password = base64.b64encode(hashlib.sha256(raw_password).digest())
>>> bcrypt.checkpw(new_password, saved_password)

不要忘記先對密碼進行編碼,所以對於 Python 3 類似

>>> raw_password = password_string.encode('utf_8')

編碼為相同的格式可能是個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM