• 使用 bcryptjs 对密码做加密


    https://www.yuque.com/hello-pg8s3/ui9z3s/ay2dgi

    Node - 017 - 使用 bcryptjs 对密码做加密

    bcrypt密码图解:

    一、前言

    用户注册时,如果不对密码做一些加密处理直接明文存储到数据库中,一旦数据库泄露,对用户和公司来说,都是非常严重的问题。

    二、使用 js-md5 包来加密

    1. md5 简介

    MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

     

    通常将128位MD5哈希表示为32位十六进制值。

    2. 使用 js-md5

    1. 安装:
    $ npm install js-md5
    1. 引入使用
    const md5 = require('js-md5')
    
    md5('123456')  // e10adc3949ba59abbe56e057f20f883e

    3. md5 加密的缺点

    理论上是不能破解的,因为md5采用的是不可逆算法。

    有的网站上提供MD5解密,是因为有大量的存储空间来保存源码和加密后的密码,当解密时就是一个查询的过程,稍微复杂点的查询就无法完成。

    这种解密方式,叫做 字典攻击

    三、bcryptjs

    解决 字典攻击 的方式是 加盐。

    bcryptjs 是 nodejs 中比较出色的一款处理加盐加密的包。

    1. 何为加盐(Salt)

    所谓加盐,就是在加密的基础上再加点“佐料”。这个“佐料”是系统随机生成的一个随机值,并且以随机的方式混在加密之后的密码中。

    由于“佐料”是系统随机生成的,相同的原始密码在加入“佐料”之后,都会生成不同的字符串。

    这样就大大的增加了破解的难度。

    如果加盐还不行,还可以再来点味精、鸡精、生姜、胡椒.....

    2. 使用 bcryptjs

    1. 安装

    $ npm install bcryptjs

    2. 使用

    // 引入 bcryptjs
    const bcryptjs = require('bcryptjs')
    // 原始密码
    const password = '123456'
    /**
     * 加密处理 - 同步方法
     * bcryptjs.hashSync(data, salt)
     *    - data  要加密的数据
     *    - slat  用于哈希密码的盐。如果指定为数字,则将使用指定的轮数生成盐并将其使用。推荐 10
     */
    const hashPassword = bcryptjs.hashSync(password, 10)
    /**
     * 输出
     * 注意:每次调用输出都会不一样
     */
    console.log(hashPassword) // $2a$10$P8x85FYSpm8xYTLKL/52R.6MhKtCwmiICN2A7tqLDh6rDEsrHtV1W
    /**
     * 校验 - 使用同步方法
     * bcryptjs.compareSync(data, encrypted)
     *    - data        要比较的数据, 使用登录时传递过来的密码
     *    - encrypted   要比较的数据, 使用从数据库中查询出来的加密过的密码
     */
    const isOk = bcryptjs.compareSync(password, '$2a$10$P8x85FYSpm8xYTLKL/52R.6MhKtCwmiICN2A7tqLDh6rDEsrHtV1W')
    console.log(isOk)
    

      

  • 相关阅读:
    递归 正则表达式 杨辉三角
    js 获取浏览器高度和宽度值
    CSS样式大全
    P2501 [HAOI2006]数字序列 (LIS,DP)(未完成)
    Luogu1064 金明的预算方案 (有依赖的背包)
    Luogu2783 有机化学之神偶尔会做作弊 (树链剖分,缩点)
    Luogu5020 货币系统 (完全背包)
    Luogu2798 爆弹虐场 (二分,Kruskal)
    luogu1419 寻找段落 (二分,单调队列)
    Luogu1083 借教室 (线段树)
  • 原文地址:https://www.cnblogs.com/developer-qin/p/14709398.html
Copyright © 2020-2023  润新知