1. 程式人生 > >node 利用crypto進行hash加密和URLSafeBase64處理 (node.js郵箱驗證)

node 利用crypto進行hash加密和URLSafeBase64處理 (node.js郵箱驗證)

最近用node.js做註冊郵箱驗證時,用到urlBase64位字串:

   //實現思路:
 //1、資料庫表中新增一個啟用的狀態欄位0或1 (0為未啟用,1未啟用),在新增一個驗證碼欄位validateCode,最後在新增一個註冊時間欄位addTime
//2、程式中,註冊頁面添加註冊資訊,隨機生成註冊驗證碼新增到資料庫中,越複雜越好,然後對驗證碼進行加密,把使用者id或者UserName
// 和加過密的驗證碼作為引數傳送到郵箱中(有的時候只把驗證碼傳送到郵箱,然後找到有沒有匹配的,
// 然後修改狀態,我感覺這樣不太好,防止有相同的驗證碼出現,所以最好在加一個引數)
//3、傳送到郵箱裡以後,使用者可以點選進行確認,這裡有時間限制,比如48小時之內未能通過註冊,則失效,只能重新註冊,啟用連結只能使用一次,一次後也將失效
//4、處理頁面中,首先驗證連結是否過期,將註冊的時間與當前的時間作比較,
// 如果超過時間則提示驗證碼過期,重新註冊或者重新發送驗證碼,然後再判斷連結是否用過,
// 只能使用一次,這個只要判斷資料庫中的驗證碼是否為空即可,驗證都通過以後,根據id或userName從資料庫中取回驗證碼與連結中的驗證碼作比較,
// 通過了,修改狀態為1,即啟用,然後將註冊碼清空,轉到登陸或者首頁,否則提示驗證失敗!
//5 ,為了防註冊機注入,我們要判斷郵箱的唯一性,要不然他們會偽造一個郵箱啟用
    
    //首先利用node.js中的crypto將使用者id進行加密(需要將加密後的值存入資料庫)
    var sha=crypto.createHash('sha512');//可以用console.log(crypto.getHashes());檢視支援哪些加密方式
    var password=sha.update(userid).digest("base64");//將userid加密
   //由於加密後的值含有特殊字元,不能直接有做為url在網路中傳輸,故需要將其轉換(這裡需要我用的是:urlsafe-base64 npm)
   //編碼後的值可以放入url中,在伺服器用郵件發出去
    var randomURLSafeBase64 = URLSafeBase64.encode(new Buffer(password,'base64'));//需要先安裝:npm urlsafe-base64
   //當用戶點選連結時,將取到的base64字串解碼,並與資料庫中的值比對
    var decodeName= URLSafeBase64.decode(randomURLSafeBase64);//編碼
    console.log("decodeName:"+decodeName.toString("base64"));//解碼

參考: