簡體   English   中英

PBKDF2中的鹽 - Python

[英]Salt in PBKDF2 - Python

我正在學習如何在使用MySQL和Python進行開發時保護密碼,遵循本教程

我的理解是用戶密碼存儲在數據庫哈希,並且鹽存儲在未加密的一側,這樣我們就可以獲取哈希密碼和鹽,並使用鹽重新輸入輸入的密碼,然后比較兩者。

雖然,當使用PBKDF2(通過passlib.hash.sha256_crypt()函數)時,我無法設置自己的鹽,只有它的大小。 那么如何使用相同的鹽重新密碼密碼,以便我可以比較兩者?

Passlib密碼哈希界面允許您設置鹽大小 salt值本身。 pbkdf2_sha256文檔

  • saltbytes )可選的salt字節。 如果指定,則長度必須介於0-1024字節之間。 如果未指定,將自動生成16字節的鹽(建議這樣做)。

  • salt_sizeint ) - 自動生成新鹽時salt_size可選字節數。 默認為16個字節,但可以是0到1024之間的任何值。

所以你可以設置自己預先生成的鹽:

>>> from passlib.hash import pbkdf2_sha256
>>> pbkdf2_sha256.hash("password", rounds=200000, salt=b'spamhameggs')
'$pbkdf2-sha256$200000$c3BhbWhhbWVnZ3M$WL9OLVcb3f7HqHeNT./kCJeunydLCi4JykzEuAdewcI'

但請注意,salt是返回字符串的一部分。 該字符串包含不僅產生的散列值,而且算法,采用回合的數量使用的鹽,通過分隔$ 鹽被編碼為base64的修改形式 您可以通過再次解碼字符串c3BhbWhhbWVnZ3M來驗證這一點::

>>> from passlib.utils.binary import ab64_decode
>>> ab64_decode(b'c3BhbWhhbWVnZ3M')
b'spamhameggs'

請參閱pbkdf2_sha256文檔的格式和算法部分。

因此,當您將完整的字符串pbkdf2_sha256存儲在數據庫中時, 驗證字符串的所有內容都在值中,包括salt。 留下生成隨機鹽最好留給該庫,因為它將使用安全方法生成一個。

您可能希望閱讀有關密碼散列Passlib教程 ,其中包括如何在數據庫中存儲時散列密碼,以及如何再次驗證它們(例如使用pdkdf2_sha256.verify(password_user_entered, hash_stored_in_database) ),其中涵蓋了這一理由。

暫無
暫無

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

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