簡體   English   中英

python bcrypt中'$2a$'的意義是什么?

[英]What is the significance of '$2a$' in python bcrypt?

有一些來源可以通過 Google 獲得並通過 SO 進行挖掘,但它們似乎相互矛盾且不完整。

所以我的問題是:

$2a$ 在 python-bcrypt 中的散列前面有什么意義?

我專門使用http://www.mindrot.org/projects/py-bcrypt/ 上的實現,但這個問題普遍適用。

此外,最好澄清它是否可以在 python-bcrypt 模塊中配置? 如果確實存在需要您使用特定的不同實現的安全問題。

$2a$是所使用算法的指標。

在 OpenBSD 密碼文件中,有許多存儲密碼的標准。 每個密碼都以算法標識符為前綴。

  • $1$ : MD5 散列
  • $2$ : bcrypt 散列
  • $5$ :SHA2-256 哈希
  • $6$ :SHA2-512 哈希

BCrypt 變種

bcrypt 最初發布時,它的標識符是$2$

$2$

BCrypt 是由 OpenBSD 人設計的。 它旨在散列密碼以存儲在 OpenBSD 密碼文件中。 散列密碼與前綴一起存儲以標識所使用的算法。 BCrypt 得到了前綴$2$

$2a$

最初的 BCrypt 規范沒有定義如何處理非 ASCII 字符,或如何處理空終止符。 對規范進行了修訂,以指定在對字符串進行哈希處理時:

  • 字符串必須是 UTF-8 編碼
  • 必須包含空終止符

$2x$、$2y$ (2011 年 6 月)

BCrypt的 PHP 實現 crypt_blowfish 中發現了一個錯誤。 這是錯誤處理第 8 位設置的字符。

他們建議系統管理員更新他們現有的密碼數據庫,將$2a$替換$2a$ $2x$ ,以表明這些哈希是錯誤的(並且需要使用舊的損壞算法)。 他們還建議讓 crypt_blowfish 為固定算法生成的散列發出$2y$的想法。 沒有其他人,包括規范的 OpenBSD,采用2x / 2y的想法。 此版本標記僅限於 crypt_blowfish

版本$2x$$2y$並不比$2a$ “更好”或“更強”。 它們是 BCrypt 的一種特定錯誤實現的殘余。

$2b$ (2014 年 2 月)

在 BCrypt 的 OpenBSD 實現中發現了一個錯誤。 他們將字符串的長度存儲在unsigned char 如果密碼超過 255 個字符,它將溢出並以 255 換行。

BCrypt 是為 OpenBSD 創建的。 當他們庫中出現錯誤時,他們決定修改版本是可以的。 這意味着如果您想保持最新的“他們的”規范,其他所有人都需要效仿。

版本$2b$並不比$2a$ “更好”或“更強”。 它是 BCrypt 的一個特定錯誤實現的殘余。 但是由於 BCrypt 規范地屬於 OpenBSD,他們可以將版本標記更改為他們想要的任何內容。

2a2x2y2b之間沒有區別。 如果您正確編寫了實現,它們都會輸出相同的結果。

如果您從一開始就做正確的事情(在 utf8 中存儲字符串並散列空終止符),那么: 22a2x2y2b之間沒有區別。 如果您正確編寫了實現,它們都會輸出相同的結果。

唯一需要關心 2x 和 2y 的人是那些您可能一直在使用crypt_blowfish 的人 唯一需要關心 2b 的人是那些可能一直在運行 OpenBSD 的人。

所有其他正確的實現都是相同和正確的。

暫無
暫無

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

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