node中的密碼安全

2021-09-13 10:45:06 字數 2515 閱讀 8439

本文將講解對於前後端分離的專案,前端註冊或登入時如何保證使用者密碼安全傳輸到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');

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

}})

這裡,我是用node自帶模組crpto進行解密,當然,你也可以用node-rsa的方法進行解密。

我們再來看一看前端請求的密碼資訊:

這樣一串字元,即便被他人獲取,如果沒有金鑰,在一定程度上,他是無法知道你的密碼的。

密碼的安全

密碼的安全 文 heiyeluren 基本密碼常識 密碼就是為了保護個人和各類系統的秘密而出現,密碼用的地方非常 廣,不管是我們進入系統,還是使用郵箱和 都少不了密碼.我們知道假如對郵箱和 的破解,那麼我們來測試一下我們被破 解的可能。如果設定為6位的密碼,用計算機進行暴力破解的方話,在pii 20...

Web安全 密碼安全

就是為了證明 你就是你的問題 計算機為了識別人的時候,需要密碼。資料庫被偷 伺服器被入侵 通訊被竊聽 http協議被竊聽 內部人員洩密 通過撞庫的方式 嚴禁明文儲存 防洩漏 單向變換 變換複雜度分析 密碼複雜度的要求 明文 密文 是一一對應的。雪崩效應 只要明文一點點不一樣,密文是完全不一樣的。密文...

密碼安全與加密 提公升千百倍的密碼安全

最近幾年太多密碼洩露問題了。出問題原因有幾個 1 明文儲存密碼。這個以csdn為首,居然超過10年都這樣,偶實在無話可說。2 只對密碼加密,只要密碼相同,無論用什麼加密方式 對稱,非對稱,多種加密方式混用 加密後的內容都一樣。這種方式的問題在於太多的使用者用的密碼相同了,只要破解乙個密碼,一批使用者...