国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何在NodeJs中使用Bcrypt來保護(hù)用戶密碼

這篇具有很好參考價(jià)值的文章主要介紹了如何在NodeJs中使用Bcrypt來保護(hù)用戶密碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

? ? ? ? 不管你給你的程序進(jìn)行了多少加密,黑客都可能有一萬種辦法黑進(jìn)你的數(shù)據(jù)庫(kù)。一個(gè)成熟的軟件必須要有額外的加密系統(tǒng)。這樣,即使數(shù)據(jù)庫(kù)真的被攻破,我們也可以更好地保護(hù)我們的用戶信息。這就是Bcrypt的作用,加鹽salt和散列hash

注意:本文僅僅講解Bcrypt的作用及用法,因此會(huì)盡量少的設(shè)計(jì)額外的概念。在真正寫碼時(shí)所需要的數(shù)據(jù)庫(kù)的操作以及路由的操作會(huì)盡量忽略

目錄

為什么要給密碼加密

在NodeJs中使用Bcrypt加密

在用戶登錄的時(shí)候使用Bcrypt校驗(yàn)身份


為什么要給密碼加密?

? ? ? ? 散列(hash)的意思是給一段普通文字使用算法加密,使他變成一個(gè)固定長(zhǎng)度的字符串。不管這段文字有多長(zhǎng),經(jīng)過算法處理后的最終的結(jié)果都將是相同長(zhǎng)度。并且每次的結(jié)果都將完全相同。

? ? ? ? 舉個(gè)例子,不過你是把111還是把'alongword'或者是其他的一些文本傳進(jìn)去,結(jié)果都會(huì)是一樣的長(zhǎng)度。并且相同的字符會(huì)一定會(huì)產(chǎn)出相同的結(jié)果。這顯然不是一個(gè)安全的做法。所以僅僅散列是不夠的。

給密碼加鹽

? ? ? ? 鹽 (salt)是一個(gè)隨機(jī)的字符串。如果你在hash的時(shí)候加入鹽作為干擾的話,那么結(jié)果就不會(huì)再保持相同了。鹽會(huì)被自動(dòng)加到hash里面,所以你不需要刻意把他保存到數(shù)據(jù)庫(kù)里面。

? ? ? ? Bcrypt早在1996年就存在,并且經(jīng)過多年的大量網(wǎng)站的使用和驗(yàn)證,鮮有報(bào)道出來的問題。可以說他的這一套算法是很安全的。接下來,我們將使用node的中間件來讓Bcrypt為我們的用戶密碼加鹽并散列。


在NodeJs中使用Bcrypt加密

? ? ? ? 首先,如果你不是很熟悉node,我們要先初始化一個(gè)node程序:

mkdir jwt-project 創(chuàng)建文件夾

cd jwt-project 進(jìn)入文件夾

npm init -y 初始化node程序

? ? ? ? 接下來,我們需要安裝一些依賴:

npm install bcrypt

? ? ? ? 安裝完所需要的依賴后,我們就可以在node模塊中引入并使用Bcrypt了

const bcrypt = require('bcrypt');

? ? ? ? 接下來,我們需要一個(gè)變量:saltRounds。saltRounds?代表加密所需的時(shí)間,saltRounds越大,加密所需時(shí)間越長(zhǎng),加密后的密碼也就越安全。但是我們也不想讓用戶永遠(yuǎn)等著我們加密密碼,所以一般使用默認(rèn)值10就可以。

const saltRounds = 10;

? ? ? ? 為了方便,我們就不使用真實(shí)用戶的密碼了。我們自己寫一個(gè)固定值就好

var password = "iamapassword";

? ? ? ? 接下來,我們要利用Bcrypt的genSalt和hash方式來生成并且存儲(chǔ)我們最終生成的hash。首先,我們先使用bcrypt.genSalt會(huì)接收saltRounds回調(diào)函數(shù),這個(gè)回調(diào)函數(shù)會(huì)返回salt結(jié)果和error對(duì)象:

bcrypt.genSalt(saltRounds, function(err, salt) {
  // 返回salt值或者進(jìn)行錯(cuò)誤處理
});

? ? ? ? ?在得到salt值后,我們?cè)诨卣{(diào)的內(nèi)部再調(diào)用Bcrypt的hash方式來生成hash。hash接受三個(gè)參數(shù),分別是密碼,salt,和回調(diào)函數(shù)。通常,我們會(huì)在這個(gè)回調(diào)函數(shù)里將處理好的hash存儲(chǔ)到數(shù)據(jù)庫(kù)中,或者進(jìn)行錯(cuò)誤處理。

bcrypt.genSalt(saltRounds, function(err, salt) {

  bcrypt.hash(password, salt, function(err, hash) {

  // 返回hash的值,并將他存儲(chǔ)到數(shù)據(jù)庫(kù)中

  });

});

但其實(shí),你也可以把以上兩個(gè)函數(shù)合并成一個(gè),結(jié)果如下

bcrypt.hash(password, saltRounds, function(err, hash) {
  // 數(shù)據(jù)庫(kù)操作和錯(cuò)誤處理
});

在用戶登錄的時(shí)候使用Bcrypt校驗(yàn)身份

? ? ? ? 如果你知道如何查看數(shù)據(jù)庫(kù)的話,你會(huì)發(fā)現(xiàn)這時(shí)候新注冊(cè)的用戶密碼已經(jīng)變成了一段長(zhǎng)長(zhǎng)的hash。這時(shí)候,再當(dāng)用戶登錄的時(shí)候,我們就不能簡(jiǎn)單的對(duì)比用戶輸入的密碼和數(shù)據(jù)庫(kù)的hash了。Bcrypt為我們提供了一個(gè)方法,叫做compare。bcrypt.compare()會(huì)接受三個(gè)參數(shù),分別是用戶輸入的密碼,數(shù)據(jù)庫(kù)中的hash,和回調(diào)函數(shù)回調(diào)函數(shù)會(huì)返回一個(gè)布爾值,如果密碼和hash吻合的話,就返回true,反之false。

? ? ? ? ?仍然為了方便起見,我們手寫一個(gè)字符串充當(dāng)密碼,來讓bcrypt幫我們驗(yàn)證密碼是否正確

var password2 = "iamapassword";
bcrypt.compare(password2, hash, function(err, result) {
  if (result) {
    console.log("密碼正確")
  }
  else {
    console.log("密碼錯(cuò)誤");
  }
});

總結(jié):

? ? ? ? Bcrypt的存在為我們的程序多加了一層保障,它利用加鹽和散列的算法將我們的密碼加密成一段很難破解的長(zhǎng)字符串,這樣,即使我們的數(shù)據(jù)庫(kù)被攻破,hash后的密碼也可以給我們提供最后一層保護(hù)文章來源地址http://www.zghlxwxcb.cn/news/detail-492508.html

到了這里,關(guān)于如何在NodeJs中使用Bcrypt來保護(hù)用戶密碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 密碼學(xué)的社會(huì)網(wǎng)絡(luò):如何保護(hù)社交網(wǎng)絡(luò)的安全

    社交網(wǎng)絡(luò)已經(jīng)成為了現(xiàn)代人們生活中不可或缺的一部分,它們?yōu)槲覀兲峁┝艘环N與家人、朋友和同事保持聯(lián)系的方式。然而,這種聯(lián)系也帶來了一些挑戰(zhàn),因?yàn)樯缃痪W(wǎng)絡(luò)上的數(shù)據(jù)經(jīng)常被盜、篡改或泄露。因此,保護(hù)社交網(wǎng)絡(luò)的安全至關(guān)重要。 在這篇文章中,我們將探討密碼學(xué)

    2024年02月20日
    瀏覽(36)
  • 企業(yè)如何合規(guī)保護(hù)用戶數(shù)據(jù) - 網(wǎng)絡(luò)安全法實(shí)施

    隨著信息技術(shù)的快速發(fā)展,企業(yè)對(duì)用戶數(shù)據(jù)的收集和處理變得越來越普遍。然而,隨之而來的是對(duì)用戶隱私和數(shù)據(jù)安全的擔(dān)憂也日益增加。為了保護(hù)用戶的權(quán)益和數(shù)據(jù)安全,網(wǎng)絡(luò)安全法實(shí)施對(duì)企業(yè)在處理用戶數(shù)據(jù)時(shí)提出了一系列要求。本文將介紹企業(yè)如何合規(guī)保護(hù)用戶數(shù)據(jù),

    2024年02月11日
    瀏覽(21)
  • 如何保護(hù) LDAP 目錄服務(wù)中的用戶安全?

    輕量級(jí)目錄訪問協(xié)議(LDAP)是目前主流的身份驗(yàn)證協(xié)議之一,由密歇根大學(xué)的 Tim Howes、Steve Kille 和 Wengyik Yeong 于1993年創(chuàng)建,又經(jīng)過了 Internet 工程任務(wù)組(IETF)的標(biāo)準(zhǔn)化,通過網(wǎng)絡(luò)分發(fā)目錄信息,扮演了身份源(IdP)的角色。 LDAP 在現(xiàn)代網(wǎng)絡(luò)中的重要性在于該協(xié)議參與共享

    2024年01月17日
    瀏覽(17)
  • 區(qū)塊鏈與智能合約的數(shù)據(jù)安全:如何保護(hù)用戶信息

    區(qū)塊鏈技術(shù)是一種分布式、去中心化的數(shù)據(jù)存儲(chǔ)和交易方式,它的核心概念是將數(shù)據(jù)存儲(chǔ)在一個(gè)由多個(gè)節(jié)點(diǎn)組成的鏈表中,每個(gè)節(jié)點(diǎn)稱為區(qū)塊,每個(gè)區(qū)塊包含一定數(shù)量的交易數(shù)據(jù)。智能合約則是一種自動(dòng)化的協(xié)議,它可以在區(qū)塊鏈上自動(dòng)執(zhí)行一些預(yù)定的操作。這兩種技術(shù)結(jié)合

    2024年04月09日
    瀏覽(27)
  • 機(jī)器遺忘同等重要,AI如何忘記不良數(shù)據(jù),保護(hù)用戶隱私?

    機(jī)器遺忘同等重要,AI如何忘記不良數(shù)據(jù),保護(hù)用戶隱私?

    在人工智能領(lǐng)域,大語(yǔ)言模型(LLMs)因其在文本生成、摘要、問答等任務(wù)中展現(xiàn)出的卓越能力而備受關(guān)注。然而,這些模型在訓(xùn)練過程中可能會(huì)記住大量數(shù)據(jù),包括敏感或不當(dāng)?shù)男畔?,從而引發(fā)倫理和安全問題。為了解決這些問題, 機(jī)器遺忘(Machine Unlearning,MU)技術(shù) 應(yīng)運(yùn)

    2024年03月22日
    瀏覽(32)
  • nginx代理后,nodejs如何獲取用戶真實(shí)ip地址(包括websocket獲取用戶真實(shí)IP地址)

    nginx代理后,nodejs如何獲取用戶真實(shí)ip地址(包括websocket獲取用戶真實(shí)IP地址)

    因?yàn)閚ginx代理的原因,我們?cè)谡?qǐng)求頭中獲取到的用戶ip只是nginx代理的ip,并非用戶真實(shí)ip,原因是經(jīng)過反向代理后,由于在客戶端和web服務(wù)器之間增加了中間層,因此web服務(wù)器無法直接拿到客戶端的ip,可以通過$remote_addr變量拿到的將是反向代理服務(wù)器的ip地址。 第一步,修改

    2024年02月13日
    瀏覽(113)
  • 小程序安全性加固:如何保護(hù)用戶數(shù)據(jù)和防止惡意攻擊

    小程序安全性加固:如何保護(hù)用戶數(shù)據(jù)和防止惡意攻擊

    第一章:引言 ? 在當(dāng)今數(shù)字化時(shí)代,移動(dòng)應(yīng)用程序的使用已經(jīng)成為人們?nèi)粘I钪械闹匾M成部分。小程序作為一種輕量級(jí)的應(yīng)用程序形式,受到了廣泛的歡迎。然而,隨著小程序的流行,安全性問題也日益凸顯。用戶數(shù)據(jù)泄露和惡意攻擊威脅著用戶的隱私和安全。本文將重

    2024年02月12日
    瀏覽(36)
  • Java安全和防護(hù):如何保護(hù)Java應(yīng)用程序和用戶數(shù)據(jù)的安全

    Java安全和防護(hù):如何保護(hù)Java應(yīng)用程序和用戶數(shù)據(jù)的安全

    ? 在當(dāng)今數(shù)字化時(shí)代,Java已經(jīng)成為主流的編程語(yǔ)言之一。無論是企業(yè)級(jí)應(yīng)用程序還是個(gè)人項(xiàng)目,Java應(yīng)用程序都承載著大量的敏感數(shù)據(jù)和業(yè)務(wù)邏輯。然而,隨著網(wǎng)絡(luò)攻擊日益猖獗,保護(hù)Java應(yīng)用程序和用戶數(shù)據(jù)的安全變得尤為重要。本文將深入探討Java應(yīng)用程序安全的重要性,并

    2024年02月03日
    瀏覽(23)
  • Python安全和防護(hù):如何保護(hù)Python應(yīng)用程序和用戶數(shù)據(jù)的安全

    Python安全和防護(hù):如何保護(hù)Python應(yīng)用程序和用戶數(shù)據(jù)的安全

    ? 在當(dāng)今數(shù)字化時(shí)代,數(shù)據(jù)安全是一個(gè)極其重要的話題。隨著Python的廣泛應(yīng)用和越來越多的人使用Python構(gòu)建應(yīng)用程序,保護(hù)Python應(yīng)用程序和用戶數(shù)據(jù)的安全變得尤為重要。本文將介紹一些關(guān)鍵的Python安全問題,并提供一些保護(hù)Python應(yīng)用程序和用戶數(shù)據(jù)的實(shí)用技巧。 在保護(hù)Py

    2024年02月16日
    瀏覽(52)
  • 6、ES單機(jī)設(shè)置用戶名密碼、集群設(shè)置用戶名密碼、es-head登錄、如何去掉密碼

    6、ES單機(jī)設(shè)置用戶名密碼、集群設(shè)置用戶名密碼、es-head登錄、如何去掉密碼

    在配置文件中添加如下參數(shù)cat config/elasticsearch.yml: 關(guān)閉es服務(wù)如果服務(wù)啟動(dòng)(kill進(jìn)程id) 啟動(dòng)es服務(wù) 待服務(wù)啟動(dòng)完成,且能正常訪問后,執(zhí)行 集群此時(shí)是啟動(dòng)狀態(tài) elasticsearch-head查看 通過瀏覽器查看 http://192.168.180.45:9200/_cat/nodes?v 進(jìn)入主節(jié)點(diǎn)的bin目錄下執(zhí)行 再次在bin目錄輸

    2024年04月26日
    瀏覽(43)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包