bcrypt对密码加密的一些认识(学习笔记)
学习nodejs和mongoDB的时候,接触了用户注册和登录的一些知识。
1、关于增强用户密码的安全性
用户的密码肯定不能保存为明文,避免撞库攻击。
撞库攻击:撞库是一种针对数据库的攻击方式,方法是通过攻击者所拥有的数据库的数据通攻击目标数据库。可以理解为用户在A网站被盗的账户密码来登陆B网站,因为很多用户在不同网站使用的是相同的账号密码因此可以起到获取用户在B网站的用户账户从而达到目的。(来自知乎https://www.zhihu.com/question/21562202)
所以,在用户刚创建时,需要对用户密码做哈希处理,以替换明文的密码。这个哈希处理会加盐。每个用户加的盐不一样,可以有效对抗彩虹表攻击。(来自nodejs in action)
加盐:加盐加密是一种对系统登录口令的加密方式,它实现的方式是将每一个口令同一个叫做”盐“(salt)的n位随机数相关联。(来自百度)
彩虹表:一个保存哈希链首尾值的哈希链集。它实现了时间和空间的平衡。(来自知乎https://www.zhihu.com/question/19790488)
2、在明文和密文比对的时候还需要我们提供盐吗?
注册的时候,密文是经过加盐的,而且盐是个随机数,那么我们需要保存这个盐吗?
答案是不需要。
bcrypt的compare方法,只需要提供明文和密文就可完成比对,因为盐是包含在哈希加密后的密文中的,使用compare方法的时候,它会将盐取出并完成比对。(来自stackoverflow,https://stackoverflow.com/questions/13023361/how-does-node-bcrypt-js-compare-hashed-and-plaintext-passwords-without-the-salt)
bcrypt对密码加密的一些认识(学习笔记)的更多相关文章
- 前端使用bcrypt对密码加密,服务器对密码进行校验
以前为了防止前端密码安全问题,都是对密码进行md5(password + salt). 有些也会用别的加密方式,但还是会存在撞库,彩虹表等破解常规密码. 因此使用bcrypt加密是一个不错的选择,因为 ...
- 任意用户密码重置的十种姿势=====>学习笔记!
原学习视频链接:https://www.butian.net/School/content?id=214%E2%80%98 1.验证码不失效 原因:获取的验证码缺少时间限制,仅判断验证码是否不正确而未 ...
- 使用bcrypt进行用户密码加密的简单实现
Bcrypt百度百科: bcrypt,是一个跨平台的文件加密工具.由它加密的文件可在所有支持的操作系统和处理器上进行转移.它的口令必须是8至56个字符,并将在内部被转化为448位的密钥. 除了对您的数 ...
- [PHP] Laravel 5.5 的 BCrypt对密码进行加密及密码验证
Laravel 5.5 的 BCrypt对密码进行加密及密码验证 一.加密 方法1) $password= Hash::make('密码'); 方法2) /也可直接使用 bcrypt 的 functi ...
- java工具类学习,系统中用户密码加密总结
现在项目,用户注册登录部分很少有涉及到了,原因:现在热门开发框架都已经在底层帮我们做了一套用户注册,密码加密,登录认证,权限控制,缓存数据等基本功能. 这有利于项目的快速完成,只需要搬砖码畜们专注于业 ...
- (三)学习MVC之密码加密及用户登录
1.密码加密采用SHA256 算法,此类的唯一实现是 SHA256Managed.在Common/Text.cs里添加Sha256方法: public static string Sha256(str ...
- 学习Spring Boot:(十四)spring-shiro的密码加密
前言 前面配置了怎么使用 shiro ,这次研究下怎么使用spring shiro的密码加密,并且需要在新增.更新用户的时候,实现生成盐,加密后的密码进行入库操作. 正文 配置凭证匹配器 @Bean ...
- 密码加密与微服务鉴权JWT
博客学习目标 1.用户注册时候,对数据库中用户的密码进行加密存储(使用 SpringSecurity). 2.使用 JWT 鉴权认证. 一.BCrypt 密码加密 1.常见的加密方式 任何应用考虑到安 ...
- PHP密码散列算法的学习
不知道大家有没有看过 Laravel 的源码.在 Laravel 源码中,对于用户密码的加密,使用的是 password_hash() 这个函数.这个函数是属于 PHP 密码散列算法扩展中所包含的函数 ...
随机推荐
- ListView属性及divider设置分割线
给ListView设置分割线,只需设置如下两个属性: android:divider="#000" //设置分割线显示颜色 android:dividerHeight=" ...
- nginx session 配置失效解决
nginx 反向代理后台web服务器session path导致的session 失效,特此总结下配置方法: 配置如下: location ^~ /2016tyjf_dev/djwechat { pr ...
- Java之排序
1.插入排序 假设第一个数已经是排好序的,把第二个根据大小关系插到第一个前面或维持不动,把第三个根据前面两个的大小关系插到对应位置,依次往后. public class InsertSort { pu ...
- C语言第二次博客作业——分支结构
一.PTA实验作业 题目1:计算分段函数 1.实验代码 #include<stdio.h> #include<math.h> int main(void) { double x ...
- Linux下进程间通信的六种机制详解
linux下进程间通信的几种主要手段: 1.管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具 ...
- 每日冲刺报告-Day4
敏捷冲刺报告--Day4 情况简介 今天完成前端后端任务对接, GUI主体编写 任务进度 赵坤: 完成后端爬虫 李世钰: 前后端对接, GUI编写 黄亦薇:召集小组成员开会,帮助查找资料,寻找BUG ...
- iOS开发UIKit框架-可视化编程-XIB
1. Interface Builder 可视化编程 1> 概述 GUI : 图形用户界面(Graphical User Interface, 简称GUI, 又称图形化界面) 是指采用图形方式显 ...
- TOTP算法 基于时间的一次性密码
/** Copyright (c) 2011 IETF Trust and the persons identified as authors of the code. All rights rese ...
- python之路--day13---函数--三元表达式,递归,匿名函数,内置函数-----练习
1.文件内容如下,标题为:姓名,性别,年纪,薪资 egon male 18 3000 alex male 38 30000 wupeiqi female 28 20000 yuanhao female ...
- JAVA_SE基础——32.this关键字调用本类的构造方法
黑马程序员入学blog... 也算是学习笔记. 下面我们来看段代码: package day07; class Student{ int id; //身份证 String name; //名字 pub ...