亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在數據庫中存儲bcrypt哈希密碼應該使用什么列類型/長度?

在數據庫中存儲bcrypt哈希密碼應該使用什么列類型/長度?

斯蒂芬大帝 2019-07-13 19:00:10
我想將散列密碼(使用bcrypt)存儲在數據庫中。什么樣的類型是好的,哪一種是正確的長度?使用bcrypt加密的密碼總是長度相同的嗎?編輯示例散列:$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu在散列一些密碼后,bcrypt似乎總是生成60個字符哈希。編輯2很抱歉沒有提到實施。我在用jBCrypt.
查看完整描述

3 回答

?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

bcrypt的模塊加密格式由以下內容組成

  • $2$,?$2a$

    $2y$

    標識

    散列算法與格式

  • 表示成本參數的兩位數值,后面跟著

    $

  • 53個字符長-64編碼值(他們使用字母表)

    .,?/,?09,?AZ,?az

    標準堿基64編碼

    (字母表)包括:
    • 22個字符(實際上只有132位解碼比特中的128位)
    • 加密輸出的31個字符(實際上186位解碼比特中只有184位)

因此,總長度分別為59或60字節。

當您使用2a格式時,您將需要60個字節。因此,對于MySQL,我建議使用CHAR(60) BINARYBINARY(60)(見這個垃圾箱和雙星??庇嘘P差異的信息)。

CHAR不是二進制安全的,等式不是完全依賴于字節值,而是依賴于實際的排序規則;在最壞的情況下。


查看完整回答
反對 回復 2019-07-13
?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

如果您正在使用PHP的password_hash()帶著PASSWORD_DEFAULT生成bcrypt哈希的算法(我假設有很大比例的人閱讀這個問題)一定要記住,在將來password_hash()可能會使用不同的算法作為默認值,因此可能會影響哈希的長度(但不一定更長)。

從手冊頁:

請注意,隨著PHP添加了新的和更強的算法,這個常量被設計成隨著時間的推移而改變。因此,使用此標識符的結果的長度會隨著時間的推移而改變。因此,建議將結果存儲在可擴展超過60個字符的數據庫列中。(255個字符將是一個不錯的選擇)。

使用bcrypt,即使您有10億用戶(即您目前正在與Facebook競爭)存儲255字節密碼散列,它也只能存儲255 GB的數據-相當于一個小型SSD硬盤的大小。存儲密碼散列不太可能成為應用程序的瓶頸。然而,在偶然的機會中,存儲空間真的由于某種原因,您可以使用PASSWORD_BCRYPT強迫password_hash()使用bcrypt,即使這不是默認的。只需確保隨時了解在bcrypt中發現的任何漏洞,并在每次發布新PHP版本時檢查發布說明。如果默認的算法被改變了,那么最好檢查一下。為什么并做出是否使用新算法的明智決定。


查看完整回答
反對 回復 2019-07-13
  • 3 回答
  • 0 關注
  • 1872 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號