bcrypt 加密的坑

const bcrypt = require(‘bcryptjs‘) //加密

//不存在,则存储

const newUser = new User({

name: ctx.request.body.name,

email: ctx.request.body.email,

password:  ctx.request.body.password

});

//加密

await bcrypt.genSalt(10, (err, salt) => {

bcrypt.hash(newUser.password, salt, (err, hash) => { //需要加密的东西

if (err) throw err;

newUser.password = hash;

});

});

await newUser.save()

.then(success => {

consol.log("注册成功")

})

.catch(err => {

Console.log(err);

})

ctx.body = newUser;

需求:接收前端传过来的post数据,经过加密后存储到数据库

坑:用bcrypt加密后进行存储【newUser.save()】,但是存储数据的密码还是明文【打印过hash,在加密的函数里是正常的】

解决:bcrypt.genSalt()这个方法本身就是异步的,这时候再用await就出问题了。解决方法就是把加密用同步的方法来实现,以及把加密这一块封装起来单独调用就行

原文地址:https://www.cnblogs.com/yinblog/p/10527735.html

时间: 2024-08-09 01:19:16

bcrypt 加密的坑的相关文章

python的bcrypt加密方式验证

bcrypt 库的地址 https://pypi.python.org/pypi/py-bcrypt/ 可以通过下载源码包在本地编译安装,不过windows下会比较麻烦,需要VCForPython27这个东东帮忙, 其实有一种简单的方法: pip install bcrypt 轻松搞定. bcrypt加密的使用场景是这样的: 1.服务端记录了密码原文,客户端接收用户输入的密码,然后用这个密码计算生成一个字符串,发给服务端. hash = bcrypt.hashpw(password, bcryp

laravel5的Bcrypt加密方式对系统保存密码的小结

laravel5文档介绍 //对 A 密码使用Bcrypt 加密 $password = Hash::make('mima'); //你也可直接使用 bcrypt 的 function $password = bcrypt('mima'); //对加密的 A 密码进行验证 if (Hash::check('mima', $hashedPassword)) { // The passwords match... } //检查 A 密码是否需要重新加密 if (Hash::needsRehash($

Java通过BCrypt加密

一.概述 在用户模块,对于用户密码的保护,通常都会进行加密.我们通常对密码进行加密,然后存放在数据库中,在用户进行登录的时候,将其输入的密码进行加密然后与数据库中存放的密文进行比较,以验证用户密码是否正确. 目前,MD5和BCrypt比较流行.相对来说,BCrypt比MD5更安全,但加密更慢. 二.使用BCrypt 首先,可以在官网中取得源代码http://www.mindrot.org/projects/jBCrypt/ 然后通过Ant进行编译.编译之后得到jbcrypt.jar.也可以不需要

整理一下关于Crypto加密的坑

之前写接口一般不用加密(做了权限处理),最近公司要求接口加密,我开始了入坑之路 因为公司其他人用的AES和DES加密,我就在网上查了下关于这方面的使用方法. 首先安装Crypto pip install Crypto 安装成功,但是这个包是1.4.1根本不支持python3.6版本, 然后就下载pycrypto:pip install pycrypto,但是报错(需要安装visual C++ 2015 14.0版本),感觉麻烦就没弄.. 之后就网上下载pycrypto的包,将里面的Crypto放

Spring Security笔记:使用BCrypt算法加密存储登录密码

在前一节使用数据库进行用户认证(form login using database)里,我们学习了如何把“登录帐号.密码”存储在db中,但是密码都是明文存储的,显然不太讲究.这一节将学习如何使用spring security3新加入的bcrypt算法,将登录加密存储到db中,并正常通过验证. 一.Bcrypt算法 int t = 0; String password = "123456"; System.out.println(password + " -> "

使用Bcrypt对密码进行加密与解密验证

Bcrypt是一个跨平台的文件加密工具. 为了保护用户的明文密码不被泄露,一般会对密码进行单向不可逆加密--哈希. 而Bcrypt恰恰就做到这一点,通过Bcrypt加密的明文密码即使解密也不是真的"解密",哪怕是内部人员,也不会看到密码. 这大大的提高了用户的安全级别.那么怎么使用呢?这里我用node的项目演示. 首先引入Bcrypt yarn add bcrypt 这是一个用户注册时输入的密码 if (isSigned) { res.render('user', { ret: tru

php中密码的加密处理及安全措施

在数据库中保存明文密码是非常不明智的选择,其危害不言而喻. 这里就不讨论明文密码的缺点了,只谈谈如何安全的保存密码. 基本的安全措施如下: 1.设置密码最小位数 2.将用户的密码加密保存 3.通过密码重置的一次性链接修改密码 4.同一IP或mac地址一天内只能获取3次重置邮件 5.用户修改密码时需输入原密码 当然还可以采取更安全的措施: 6.不常用设备登陆需手机短信验证(需要短信平台) 7.设置安全问答信息 8.记录错误登陆请求信息,多次错误后拒绝登陆尝试 -------------------

一文让你轻松了解JAVA开发中的四种加密方法

文章目录 一.工具类 md5加密工具类 base64加密工具类 Bcrypt工具类 二.加密测试 MD5加密测试 base64加密测试 SHA加密测试 BCrypt加密测试 一.工具类 1. md5加密工具类 package 加密Tester.util; import java.security.MessageDigest; public class MD5Utils { private static final String hexDigIts[] = {"0","1&qu

REST API-- spring boot jwt

原文  https://juejin.im/post/58c29e0b1b69e6006bce02f4 通常情况下,把API直接暴露出去是风险很大的,不说别的,直接被机器攻击就喝一壶的.那么一般来说,对API要划分出一定的权限级别,然后做一个用户的鉴权,依据鉴权结果给予用户开放对应的API.目前,比较主流的方案有几种: 用户名和密码鉴权,使用Session保存用户鉴权结果. 使用OAuth进行鉴权(其实OAuth也是一种基于Token的鉴权,只是没有规定Token的生成方式) 自行采用Token