2012-07-10 74 views
2

我正在查看各種語言的各種bcrypt實現,並注意到大多數字符的限制 - 特別是,最多72個字符的節點bcrypt,php的bcrypt和py-bcrypt所有展覽。使用SHA散列以允許更長的bcrypt輸入

如果應用程序事先通過SHA-256或SHA-512校驗和來運行用戶輸入以便爲bcrypt啓用更長的輸入,那麼有什麼優缺點?

+0

bcrypt用於密碼。你真的擔心超過72個字符的密碼? – 2012-07-10 13:36:10

+0

@MattBall我並不擔心,其實我很好奇它的含義。當然這很少會被要求,但這是最近在討論中提出的,我想知道它是否像我懷疑的那樣有問題。 – damianb 2012-07-10 13:42:15

+0

security.SE上的完全重複:[應用bcrypt之前的預哈希密碼以避免限制密碼長度](http://security.stackexchange.com/questions/6623/pre-hash-password-before-applying-bcrypt-to -avoid-restrictting-password-length) – CodesInChaos 2012-07-10 19:02:07

回答

1

發現CLI應用程序here被限制爲8-56個「字符」(包括C,所以一個字符可以是任何我想的)。天知道爲什麼你會爲事後創建一個基於密碼的密鑰派生函數(這幾乎肯定會需要無限的輸入)。

具有足夠強度和輸出大小的額外安全散列不會降低安全性。

在將結果提供給bcrypt庫之前,將結果編碼爲十六進制,這幾乎可以肯定期望一個字符串(不要被「奇數」00h字節敲擊)。你也可以使用SHA-256,我認爲如果你事後把它加入到bcrypt中,那麼或多或少會有所作爲。否則,你可能會被迫使用base64。

最後,儘量不要進入這種情況,執行非標準密碼術幾乎肯定是一件壞事。