bcrypt的簡單使用

前段時間在搗鼓個人項目的時候用到了nodejs做服務端,發現使用加密的方法和之前常用的加密方式不太一致,下面以demo的形式總結一下bcrypt對密碼進行加密的方法。

一、簡介

Bcrypt簡介: bcrypt是一種跨平臺的文件加密工具。bcrypt 使用的是布魯斯·施內爾在1993年發布的 Blowfish 加密算法。由它加密的文件可在所有支持的操作系統和處理器上進行轉移。它的口令必須是8至56個字符,并將在內部被轉化為448位的密鑰。

簡單的說,Bcrypt就是一款加密工具,可以比較方便地實現數據的加密工作。下面是使用Bcrypt對數據加密的一個簡單的栗子:

二、栗子

var mongoose = require('mongoose');// 引入bcrypt模塊
var bcrypt = require('bcrypt');
// 定義加密密碼計算強度
var SALT_WORK_FACTOR = 10;// 連接數據庫
mongoose.connect('mongodb://localhost:27017/test');//定義用戶模式
var UserSchema = new mongoose.Schema({name: {unique: true,type: String},password: {unique: true,type: String}
}, {collection: "user"
});//使用pre中間件在用戶信息存儲前進行密碼加密
UserSchema.pre('save', function(next) {var user = this;//進行加密bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) {if(err) {return next(err);}bcrypt.hash(user.password, salt, function(err, hash) {if(err) {return next(err);}user.password = hash;next();})});
});//編譯模型
var UserBx = mongoose.model('UserBx', UserSchema);//創建文檔對象實例
var user = new UserBx({name: 'lidan',password: '12345'
});//保存用戶信息
user.save(function(err, user) {if(err) {console.log(err);}else {// 如果保存成功,打印用戶密碼console.log('password:' + user.password);}
})

結果:
這里寫圖片描述

可以發現,保存到數據庫中的是加密后的密碼。

注: SALT_WORK_FACTOR 表示密碼加密的計算強度,從1級到10級,強度越高,密碼越復雜,計算時間也越長。值得注意的是,強度為1-3時強度太低,系統會默認使用強度為10的計算方式進行加密。

參考文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/249671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/249671.shtml
英文地址,請注明出處:http://en.pswp.cn/news/249671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

盒子居中

1、未脫標 margin:0 auto; 2、脫標(absolute、fixed) left:50%; margin-left:width/2; 轉載于:https://www.cnblogs.com/liujianing/p/10356984.html

織夢無子欄目時禁止調用同級欄目

1. 修改文件 \include\taglib\channel.lib.php 把代碼 if($typeson && $reid!0 && $totalRow0) 改為 if($typeson && $reid!0 && $totalRow0 && $noself) 2. 使用channel標簽時添加noself屬性 {dede:channel noselfyes} {/dede:channe…

nodejs實現文件上傳

前段時間在做個人項目的時候,用到了nodejs服務端上傳文件,現在回頭把這個小結一下,作為記錄。 本人上傳文件時是基于express的multiparty,當然也可以使用connect-multiparty中間件實現,但官方似乎不推薦使用connect-m…

python騰訊語音合成

一、騰訊語音合成介紹 騰訊云語音合成技術(TTS)可以將任意文本轉化為語音,實現讓機器和應用張口說話。 騰訊TTS技術可以應用到很多場景,比如,移動APP語音播報新聞;智能設備語音提醒;依靠網上現有…

鉤子函數和回調函數的區別

一般認為,鉤子函數就是回調函數的一種,其實還是有差異的,差異地方就是:觸發的時機不同。 先說鉤子函數: 鉤子(Hook)概念源于Windows的消息處理機制,通過設置鉤子,應用程…

【bzoj4712】洪水

Portal --> bzoj4712 Description 給你一棵樹,節點從\(1\)到\(n\)編號,每個節點有一個權值,有若干次操作,操作有以下兩種: \((C,x,delta)\):將編號為\(x\)的點的權值改為\(delta\) \((Q,x)\)&#xff1a…

[USACO]地震 (二分答案+最優比率生成樹詳解)

題面:[USACO 2001 OPEN]地震 題目描述: 一場地震把約翰家的牧場摧毀了, 堅強的約翰決心重建家園。 約翰已經重建了N個牧場,現在他希望能修建一些道路把它們連接起來。研究地形之后,約翰發現可供修建的道路有M條。碰巧的…

HTTP協議學習筆記

1.HTTP協議簡介 (1)客戶端連上web服務器后,若想獲得web服務器中的某個web資源,需遵守一定的通訊格式,HTTP協議用于定義客戶端與web服務器通迅的格式。 (2)HTTP是hypertext transfer protocol&…

defer和async的原理與區別

上一篇剛轉載了一篇有關于網站性能優化的文章,其中提及到了頁面的加載和渲染的過程,提到了defer和async的相關區別,但是本人在此之前并沒有深究其中的區別。 defer和async是script標簽的兩個屬性,用于在不阻塞頁面文檔解析的前提…

一些奇妙的線段樹操作

學過數據結構和會做題完全是兩個概念orz 各種各樣的題目都應該見識一下 簡單的目錄: 最大連續長度 吉司機線段樹 線段樹合并/分裂 最大連續長度問題 典型題目:HDU 3911 ($Black$ $And$ $White$) 題目大意:有一個長度為…

微服務實踐沙龍-上海站

微服務的概念最早由Martin Fowler與James Lewis于2014年共同提出,核心思想是圍繞業務能力組織服務,各個微服務可被獨立部署,服務間是松耦合的關系,以及數據和治理的去中心化管理。微服務能夠幫助企業應對業務復雜、頻繁更新以及團…

Spring的refresh()方法調用過程

Spring的refresh()方法調用過程 refresh()是Spring中比較核心的方法,Spring所有的初始化都在這個方法中完成 具體代碼如下 public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// Prepare this co…

Web數據存儲之localStorage和sessionStorage

Web數據存儲之localStorage和sessionStorage 學習前端以來,自己了解有localStorage和sessionStorage的相關存儲的知識,也有實踐過,但是之前只限于能用的基礎上,但最近看了一本書,深入了解了localStorage和sessionStor…

(四)RabbitMQ消息隊列-服務詳細配置與日常監控管理

(四)RabbitMQ消息隊列-服務詳細配置與日常監控管理 原文:(四)RabbitMQ消息隊列-服務詳細配置與日常監控管理RabbitMQ服務管理 啟動服務:rabbitmq-server -detached【 /usr/local/rabbitmq/sbin/rabbitmq-server -deta…

oracle中delete、truncate、drop的區別 (轉載)

一、delete 1、delete是DML,執行delete操作時,每次從表中刪除一行,并且同時將該行的的刪除操作記錄在redo和undo表空間中以便進行回滾(rollback)和重做操作,但要注意表空間要足夠大,需要手動提交…

前端開發工程化探討--基礎篇(長文)

轉載自UC資深前端工程師張云龍的github 喂喂喂,那個切圖的,把頁面寫好就發給研發工程師套模板吧。 你好,切圖仔。 不知道你的團隊如何定義前端開發,據我所知,時至今日仍然有很多團隊會把前端開發歸類為產品或者設計崗…

Python讀取Json字典寫入Excel表格的方法

需求: 因需要將一json文件中大量的信息填入一固定格式的Excel表格,單純的復制粘貼肯定也能完成,但是想偷懶一下,于是借助Python解決問題。 環境: Windows7 Python2.7 Xlwt 具體分析: 原始文件為json列表&am…

Spring-BeanFactory源碼分析

正式進入Spring 源碼分析這個模塊了,對于spring這個龐大的工程,如果要一點點的完全分析是非常困難的,對于應用型框架,我還是偏向于掌握思想或者設計,而不是記住代碼,對于初次看spring源碼,相信大…