上一期的文章《我們應該如何保護使用者的密碼》裡我們介紹了bcrypt
相較於md5
,sha-1
...sha-256
等雜湊演算法更適合用於做密碼的雜湊,原因就是bcrypt
演算法雜湊字串的速度遠遠慢於上面列舉的那些演算法。這樣即使整個使用者密碼庫被使用者盜用後想要通過彩虹表和暴力破解的方法猜測出使用者的密碼代價會非常高昂。今天的文章裡就主要來看一下bcrypt
雜湊的組成部分以及在go
語言裡如何使用bcrypt
對密碼字串進行雜湊。
bcrypt
雜湊由多個部分組成。這些部分用於確定建立雜湊的設定,從而可以在不需要任何其他資訊的情況下對其進行驗證。
上圖是乙個bcrypt
雜湊的示例圖,其由四部分組成:
另外無論什麼方法:每個密碼加單獨的鹽進行雜湊,使用bcrypt
進行雜湊等等,如果使用者使用非常簡單的密碼例如password
或123456
,還是能被猜測出來的,所以在使用者設定密碼時應該禁止他們輸入簡單的密碼。
bcrypt
的原理和實現都非常複雜,不過常用的程式語言都有實現bcrypt
的包讓我們直接使用,在go
語言裡是通過golang.org/x/crypto/bcrypt
包提供bcrypt
相關功能給開發者使用的。
接下來我們在http_demo
專案裡演示一下使用bcrypt
做密碼雜湊和驗證的方法,首先我們需要安裝一下bcrypt
包
$ go get golang.org/x/crypto/bcrypt
bcrypt
包只提供了三個函式:
我們建立乙個處理請求的handler
程式,演示bcrypt
庫三個函式的功能
增加handler
程式的路由:
func registerroutes(r *mux.router)
重啟http_demo
伺服器後訪問http://localhost:8000/index/password_hashing
即可得到如下結果:
如何使用Docker快速部署go web應用程式
雖然大部分go應用程式可以編譯為乙個單一的二進位制檔案。都是對於web應用程式來說,可能還有自己的模板和配置檔案。如果在乙個專案中包含大量的檔案,可能會因為檔案的不同步而導致出錯或造成更嚴重的錯誤。本文將通過beego應用程式在docker中的快速部署,來介紹如何使用docker簡化go web應用...
使用GDI 程式設計
1.引言 gdi 是windows xp中的乙個子系統,它主要負責在顯示螢幕和列印裝置輸出有關資訊,它是一組通過c 類實現的應用程式程式設計介面。顧名思義,gdi 是以前版本gdi的繼承者,出於相容性考慮,windows xp仍然支援以前版本的gdi,但是在開發新應用程式的時候,開發人員為了滿足圖形...
程式語言使用
1 定時任務 import time forrange time.tick time.minute 5 2 defer引數,在走到defer是,傳參已經確定,只是等待最後執行 package main import fmt time func main func test4 func test4 t...