用你會用什麼樣的算法來爲你的用戶保存密碼?若是你還在用明碼的話,那麼一旦你的網站被hack了,那麼你全部的用戶口令都會被泄露了,這意味着,你的系統或是網站就此完蛋了。因此,咱們須要經過一些不可逆的算法來保存用戶的密碼。好比:MD5, SHA1, SHA256, SHA512, SHA-3,等Hash算法。這些算法都是不可逆的。系統在驗證用戶的口令時,須要把Hash加密事後的口令與後面存放口令的數據庫中的口令作比較,若是一致纔算驗證經過。算法
但你以爲這些算法好嗎?我說的是:MD5, SHA1, SHA256, SHA512, SHA-3。若是你使用的是MD5算法來加密你的口令,若是你的口令長度只有小寫字母再加上數字,假設口令的長度是6位,那麼在目前一臺比較新一點的PC機上,窮舉全部的口令只須要40秒鐘。而據咱們瞭解,幾乎有90%以上的用戶只用小寫字母和數字來組織其口令。對於6位長度的密碼只須要最多40秒就能夠破解了,這可能會嚇到你。數據庫
若是你願意花2000美金和一週的時間來構建一個CUDA,那麼,你能夠在你組建的這個集羣中使用進行密碼窮舉運算,其速度是,1秒鐘能夠計算7億個口令。對於目前實際當中使用的比較複雜的口令,其破解率也能夠高達每秒一個。固然,這裏說的算法是MD5,SHA之類的算法。安全
那麼,對於這樣的一種狀況來講,咱們怎麼辦?咱們仍是有辦法的。性能
咱們知道MD5,SHA的算法速度太快了。因此,咱們須要一個「慢一點」的加密算法。呵呵。bcrypt是這樣的一個算法,由於它很慢,對於計算機來講,其慢得有點BT了,但卻慢得剛恰好!對於驗證用戶口令來講是不慢的,對於窮舉用戶口令來講,其會讓那些計算機變得如同蝸牛同樣。網站
由於bcrypt採用了一系列各類不一樣的Blowfish加密算法,並引入了一個work factor,這個工做因子可讓你決定這個算法的代價有多大。由於這些,這個算法不會由於計算機CPU處理速度變快了,而致使算法的時間會縮短了。由於,你能夠增長work factor來把其性能降下來。呵呵。編碼
那麼,bcrypt到底有多慢?若是和MD5一塊兒來比較的話,若是使用值爲12的work factor的話,若是加密「cool」的話,bcrypt須要0.3秒,而MD5只須要一微秒(百萬分之一秒)。也就是說,前面咱們說的那個只須要40秒就能夠窮舉完全部的可能的MD5編碼的口令的算法,在使用bcrypt下,須要12年。加密
這就是bcrypt給你帶來的選擇,你能夠一個安全的口令和一個快速的加密算法,或是一個不怎麼安全的口令和一個性能很差的加密算法。集羣