浅谈BCrypt算法

2023-11-08


前言

BCrypt算法是一种基于哈希算法的算法,所以,这种算法是不可逆的


一、BCrypt算法是什么?

BCrypt算法是一种基于哈希算法的算法,所以,这种算法是不可逆的

通过BCrypt算法进行编码后的结果,长度固定为60字符

使用同一个原文进行反复编码,每次得到的结果都是不同的,因为在编码过程中,BCrypt使用了随机的盐,并且,使用的盐也作为编码结果的一部分保存了下来

图解如下:

 

二、使用步骤

1.对明文进行加密

创建BCryptPasswordEncode类对象,使用对象.encode(明文)方法即可生成密文

代码如下(示例):

public void testEncode(){
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();

        for (int i = 0; i < 5; i++) {
            String rawPassword = "123456";
            String encodedPassword = passwordEncoder.encode(rawPassword);
            //在编码过程中,BCrypt使用了随机的盐
            //所以每次得到的结果都不一致
            log.debug("原文={},密文={}",rawPassword,encodedPassword);
            //原文=123456,密文=$2a$10$xd.seKl0H3k/Ks72BoKJVO95yCvhhSy4u9nXzEOBOeJ7lxxke69Aq
            //原文=123456,密文=$2a$10$2rfZBv4gjy4MeJ2h93VC3eARlVlBJRKje8UMMu9Ul4JV6FG.OPTxy
            //原文=123456,密文=$2a$10$dGSHSIhvwnflGBIrdNsTwusPpvNbvjxzwz10mg3RTVrfR1sxhKmda
            //原文=123456,密文=$2a$10$NUFTdtD1/rcA7d4qzpQ3PecDEIvzTp7HeuFl8gv7zcg1O/kw0vNqq
            //原文=123456,密文=$2a$10$3CjSrCyMv/imDsJiJvwOVOxuNcaUOppExXg5kZLA1DJ0nZ/7aw48G
        }
    }

2.验证

使用对象.matches(明文,密文)验证是否匹配,由于在生成密文的时候,盐作为编码结果的一部分保存在密文中,所以在验证时:

a.会将密文中的盐值部分取出,加到明文中,生成对应密文

b.将生成的密文与参数中的密文对比,看是否一致

c.如果一致,方法返回值为true;反之,方法返回值则为false

代码如下(示例):

@Test
    public void testMatches(){
        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
        String rawPassword = "123456";
        //从上面运行得到的密文随机取一个验证
        String encodedPassword = "$2a$10$3CjSrCyMv/imDsJiJvwOVOxuNcaUOppExXg5kZLA1DJ0nZ/7aw48G";
        //使用matches()方法,需传参原文,密文,返回值为布尔型,true则验证成功
        boolean matches = passwordEncoder.matches(rawPassword,encodedPassword);
        log.debug("原文={},密文={},匹配结果={}",rawPassword,encodedPassword,matches);
    }

总结

相较于消息摘要算法,BCrypt算法操作简洁,由于在编码过程中,BCrypt使用了随机的盐,其安全性也更高

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈BCrypt算法 的相关文章

随机推荐

  • Vue+百度统计 实现网页的PV和UV统计

    目录 什么是PV和UV 百度统计 VUE 验证安装 查看统计 拓展 什么是PV和UV 这里我懒得打字了 直接百度扒过来吧 这个了解知道是啥就行 百度统计 首先你要有个百度账号 自己测试的时候可以用自己的百度个人账户 项目里向公司申请企业商业
  • JAVA byte类型转String类型

    问题 RSA加密 byte类型转String类型 格式转换之后内容变了 解密解不出来 第一种方式 使用 ISO 8859 1 编码 使用此方式编码返回结果会乱码 例如 public static void main String args
  • 超详细Shell学习教程第四篇shell脚本参数化

    目录 1 1参数化实例 1 2参数处理说明 1 3带返回值的参数 书写带参数的shell脚本 1 1参数化实例 创建bash1 sh bin bash echo Shell 传递参数实例 echo 第一个参数为 1 echo 参数个数为 e
  • 学习swoole框架需要杀掉9501进程,强制的解决办法

    1 查看进程 我们运行一下命令 netstat anp grep 9501 2 看出进程29698占用的9501端口 3 强制杀死进程 kill 9 29698 强制
  • python自动化(三):selenium微博抢票(含抢票程序设计思路)

    缘起 这个故事起源于女票是一个bjd娃圈爱好者 我才知道在娃圈里经常通过微博私信的方式进行一些商品的交易 例如娃娃的面妆 衣服和娃娃本身 这就引发了抢票需求 流程 在某一个整的时间点进行微信的私信发送 排名靠前者获得 人工操作反应慢 只能提
  • 不卸载重装,直接升级TeX Live的方法(Win11)

    不卸载重装 直接升级TeX Live的方法 Win11 1 前言 前两天想要用LaTeX写中文文档 更新ctex宏包的时候想起来已经好久没有更新TeX Live版本 上网查了下 TeX Live的2022版本已经可以使用 觉得可以在写文档的
  • JVM知识总结

    第一章 书籍推荐与JVM相关面试题 1 面试题 https blog csdn net Y0Q2T57s article details 80682013 commentBox https blog csdn net Javazhoumou
  • Unity 使用VRTK获取射线检测碰触的物体信息

    steam VR 版本 SteamVR plugin for Unity v1 2 3 VRTK版本 VRTK Virtual Reality Toolkit VR Toolkit 3 3 0 检测三维物体 1 创建脚本 并获取VRTK P
  • 【100%通过率 】【华为OD机试 c++/python】查找单入口空闲区域【 2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 给定一个 m x n 的矩阵 由若干字符 X 和 O 构成 X 表示该处已被占据 O 表示该处空闲 请找到最大的单入口空闲区域 解释 空闲区域是
  • [技术经理]01 程序员最优的成长之路是什么?

    00前言 谈起程序员的职业规划 针对大部分的职场人士 最优的成长之路应该是走技术管理路线 而不是走技术专家路线 01关键的一步 中国自古就有 学而优则仕 的传统 发展到今天 在我们的现代企业里面 尤其是在我们的软件企业里面 就演变成了 技而
  • awk 正则表达式、正则运算符详细介绍

    前言 使用awk作为文本处理工具 正则表达式是少不了的 要掌握这个工具的正则表达式使用 其实 我们不必单独去学习它的正则表达式 正则表达式就像一门程序语言 有自己语法规则已经表示意思 对于不同工具 其实大部分表示意思相同的 在linux众多
  • numpy取值大全

    记录numpy取值的所有方法 欢迎 切片操作 整数数组索引 布尔数组索引 布尔数组索引 花式索引 数据结构化取值 欢迎 在NumPy中 可以使用切片 整数数组索引和布尔数组索引来进行取值操作 切片操作 可以使用类似于Python中的切片操作
  • c#之哈希表(Hashtable)

    using System using System Collections Generic using System Collections 哈希表的using引用 using System Linq using System Text u
  • HttpServletRequest request 获取form参数的两种方式

    java view plain copy RequestMapping value pay method RequestMethod POST public String buildRequest HttpServletRequest re
  • 计算机毕业设计ssm基于SSM+Vue的法律咨询信息系统的设计与实现5m1le9 (附源码)轻松不求人

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 ssm mybatis Ma
  • PHP之hash函数进行SHA256加密的方法

    SHA256加密的方法 function encrypt sha256 str return hash sha256 str SHA256Hex加密 function SHA256Hex str re hash sha256 str tru
  • 阿里实习offer成功上岸,这几点至关重要

    Hello 大家好 欢迎大家来到CSDN云原生计划 考生说 栏目 本期采访的是近期成功获得阿里巴巴暑假实习offer的CSDN云原生专业工程师计划学员的中南大学大三电子信息工程专业的刘贝同学和大家分享成功申请阿里巴巴暑假实习的经验以及面试经
  • 【Mysql】MySQL体系结构,InnoDB、MyISAM存储引擎,索引结构、分类、语法、性能分析

    1 MySQL体系结构 连接层 主要完成一些类似于连接处理 授权认证 及相关的安全方案 在该层上引入了线程池的概念 为通过认证安全接入的客户端提供线程 同样在该层上可以实现基于SSL的安全链接 服务器也会为安全接入的每个客户端验证它所具有的
  • JS实现直接插入排序

    直接插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴 但它的原理应该是最容易理解的了 因为只要打过扑克牌的人都应该能够秒懂 插入排序是一种最简单直观的排序算法 它的工作原理是通过构建有序序列 对于未排序数据 在已排序序列中
  • 浅谈BCrypt算法

    文章目录 前言 一 BCrypt算法是什么 二 使用步骤 1 对明文进行加密 2 验证 总结 前言 BCrypt算法是一种基于哈希算法的算法 所以 这种算法是不可逆的 一 BCrypt算法是什么 BCrypt算法是一种基于哈希算法的算法 所