3 回答

TA貢獻(xiàn)1796條經(jīng)驗 獲得超7個贊
bcrypt的模塊加密格式由以下內(nèi)容組成
或$2$
,?$2a$
標(biāo)識$2y$
散列算法與格式
- 表示成本參數(shù)的兩位數(shù)值,后面跟著
$
- 53個字符長-64編碼值(他們使用字母表)
與.
,?/
,?0
–9
,?A
–Z
,?a
–z
標(biāo)準(zhǔn)堿基64編碼
(字母表)包括:- 22個字符(實際上只有132位解碼比特中的128位)
- 加密輸出的31個字符(實際上186位解碼比特中只有184位)
因此,總長度分別為59或60字節(jié)。
當(dāng)您使用2a格式時,您將需要60個字節(jié)。因此,對于MySQL,我建議使用CHAR(60) BINARY
或BINARY(60)
(見這個垃圾箱和雙星??庇嘘P(guān)差異的信息)。
CHAR
不是二進(jìn)制安全的,等式不是完全依賴于字節(jié)值,而是依賴于實際的排序規(guī)則;在最壞的情況下。

TA貢獻(xiàn)1806條經(jīng)驗 獲得超8個贊
如果您正在使用PHP的password_hash()
帶著PASSWORD_DEFAULT
生成bcrypt哈希的算法(我假設(shè)有很大比例的人閱讀這個問題)一定要記住,在將來password_hash()
可能會使用不同的算法作為默認(rèn)值,因此可能會影響哈希的長度(但不一定更長)。
從手冊頁:
請注意,隨著PHP添加了新的和更強(qiáng)的算法,這個常量被設(shè)計成隨著時間的推移而改變。因此,使用此標(biāo)識符的結(jié)果的長度會隨著時間的推移而改變。因此,建議將結(jié)果存儲在可擴(kuò)展超過60個字符的數(shù)據(jù)庫列中。(255個字符將是一個不錯的選擇)。
使用bcrypt,即使您有10億用戶(即您目前正在與Facebook競爭)存儲255字節(jié)密碼散列,它也只能存儲255 GB的數(shù)據(jù)-相當(dāng)于一個小型SSD硬盤的大小。存儲密碼散列不太可能成為應(yīng)用程序的瓶頸。然而,在偶然的機(jī)會中,存儲空間真的是由于某種原因,您可以使用PASSWORD_BCRYPT
強(qiáng)迫password_hash()
使用bcrypt,即使這不是默認(rèn)的。只需確保隨時了解在bcrypt中發(fā)現(xiàn)的任何漏洞,并在每次發(fā)布新PHP版本時檢查發(fā)布說明。如果默認(rèn)的算法被改變了,那么最好檢查一下。為什么并做出是否使用新算法的明智決定。
添加回答
舉報