本文將講解對於前後端分離的專案,前端註冊或登入時如何保證使用者密碼安全傳輸到server端,最終存入資料庫加密真的有必要嗎?
我們先來看一看前端發起的ajax請求中,如果不對密碼進行加密,會發生什麼。
f12開啟chrome開發者工具,找到請求,檢視請求引數如下:
如果你的協議是http,那麼前端傳給後端的密碼差不多是裸奔狀態,因為http傳輸的是明文,很可能在傳輸過程中被竊聽,偽裝或篡改。
那麼,弄個https不就好了嗎?
https的確能夠極大增加**的安全性,但是用https得先買證書(也有免費的),對於個人站點或者不想弄證書的情況下,那最起碼也得對使用者密碼進行一下加密吧。
先看一下大體流程圖,首先,我們用工具生成公鑰和私鑰,將其放入server端,前端發起請求獲取公鑰,拿到公鑰後對密碼進行加密,然後將加密後的密碼傳送到server端,server端將用金鑰解密,最後再用sha1加密密碼,存入資料庫。
既然選擇rsa加密,那麼首先得有工具啊,常見的有openssl,但這裡不介紹,感興趣的請自行查閱,對於node而言,我介紹乙個不錯的庫node-rsa,我們將用它來生成rsa公鑰和金鑰。
rsa是一種非對稱加密演算法,即由乙個金鑰
和乙個公鑰
構成的金鑰對,通過金鑰加密,公鑰解密,或者通過公鑰加密,金鑰解密。其中,公鑰可以公開,金鑰必須保密
。
用node-rsa生成的公鑰和金鑰**如下:
const nodersa = require('node-rsa')
const fs = require('fs')
// generate new 512bit-length key
var key = new nodersa()
key.setoptions()
var privatepem = key.exportkey('pkcs1-private-pem')
var publicder = key.exportkey('pkcs8-public-der')
var publicderstr = publicder.tostring('base64')
// 儲存返回到前端的公鑰
fs.writefile('./pem/public.pem', publicderstr, (err) => )
// 儲存私鑰
fs.writefile('./pem/private.pem', privatepem, (err) => )
執行完成後,我們將在根目錄下得到公鑰和私鑰檔案:
注意:server端的公鑰和金鑰應該隔一段時間換一次,比如每次伺服器重啟時。
核心**如下:
前端將用到jsencrypt對其進行加密,詳細用法請參考github。
後端核心**:
const express = require('express');這裡,我是用node自帶模組crpto進行解密,當然,你也可以用node-rsa的方法進行解密。const crypto = require('crypto');
const fs = require('fs');
var privatepem = fs.readfilesync('./pem/private.pem');
// cors 注意:要放在處理路由前
function crossdomain(req, res, next)
// 不加會報錯
if (req.method === 'options')
switch (req.url) ,
buffer2
)console.log(decrypted.tostring('utf8'))
// sha1加密
var sha1 = crypto.createhash('sha1');
var password = sha1.update(decrypted).digest('hex');
console.log('輸入到資料庫中的密碼是: ', password)
// 存入資料庫中
// store to db...
res.end('reg ok')
break
}})
我們再來看一看前端請求的密碼資訊:
這樣一串字元,即便被他人獲取,如果沒有金鑰,在一定程度上,他是無法知道你的密碼的。
密碼的安全
密碼的安全 文 heiyeluren 基本密碼常識 密碼就是為了保護個人和各類系統的秘密而出現,密碼用的地方非常 廣,不管是我們進入系統,還是使用郵箱和 都少不了密碼.我們知道假如對郵箱和 的破解,那麼我們來測試一下我們被破 解的可能。如果設定為6位的密碼,用計算機進行暴力破解的方話,在pii 20...
Web安全 密碼安全
就是為了證明 你就是你的問題 計算機為了識別人的時候,需要密碼。資料庫被偷 伺服器被入侵 通訊被竊聽 http協議被竊聽 內部人員洩密 通過撞庫的方式 嚴禁明文儲存 防洩漏 單向變換 變換複雜度分析 密碼複雜度的要求 明文 密文 是一一對應的。雪崩效應 只要明文一點點不一樣,密文是完全不一樣的。密文...
密碼安全與加密 提公升千百倍的密碼安全
最近幾年太多密碼洩露問題了。出問題原因有幾個 1 明文儲存密碼。這個以csdn為首,居然超過10年都這樣,偶實在無話可說。2 只對密碼加密,只要密碼相同,無論用什麼加密方式 對稱,非對稱,多種加密方式混用 加密後的內容都一樣。這種方式的問題在於太多的使用者用的密碼相同了,只要破解乙個密碼,一批使用者...