THUDMTEAM 李相赫算法
咱們在平時作做業或本身開發一個程序的時候,每每會把用戶的密碼等重要信息直接保存到數據庫當中,可是這種作法實際上是很是危險的。若是有個黑客攻擊了咱們的數據庫,那麼一些重要信息會被黑客劫走,因此咱們要對一些重要信息進行加密處理。數據庫
字符串的加密可分爲單向加密,對稱加密和非對稱加密。單向加密是指加密以後沒法恢復原狀的加密方式,咱們能夠經過一樣的加密方式直接與數據庫中的數據作比較。本文章中主要討論一下單向加密方式。安全
createHashdom
createHash是一種最簡單的單向加密方式,如下是具體例子:加密
createHash中寫入Hash算法,crypto提供的算法有sha256,sha512,MD5等,選擇一個本身認爲合適的Hash算法。spa
update中填入要加密的對象,它能夠是密碼,也能夠是找回密碼時使用的安全答案。code
digest中填入encoding方法,crpyto提供的encoding方法有base64,hex等,和Hash算法同樣選擇一個本身認爲合適的Hash算法(我的認爲仍是推薦base64,hex太長了)。對象
createHash方法寫起來很簡單,破密碼也同樣簡單,黑客能夠經過彩虹表,很容易破解出其中的規律而獲得信息,因此createHash這種方式很是不推薦使用。那咱們應該是用什麼方法對信息進行加密呢,有一個方法叫作Password-Based Key Derivation Function 2,簡稱PBKDF2。blog
Password-Based Key Derivation Function 2(PBKDF2)ip
pbkdf2方法比createHash複雜一點,可是它的效果會比createHash好好幾倍。如下爲具體例子:
先經過crypto模塊提供的randomBytes方法,定義一個salt並賦值給buf中,再調用pbkdf2方法。它總共有5個參數,從左到右依次爲要加密的信息,salt,反覆次數,密碼長度和Hash算法。使用此方法對信息加密,那麼經過彩虹表破解密碼那是徹底不可能的。可是要注意的一點是保存加密的密碼的同時,也要保存相應的salt值。由於每次要對信息加密的時候,randomBytes會返回出一個不一樣的值,可是pbkdf2中的salt值改變,那麼相應的加密結果也會改變的,因此必定要記住保存加密的信息的同時,也要保存salt值。