首页 > 作文

Java使用bcrypt实现对密码加密效果详解

更新时间:2023-04-06 04:10:55 阅读: 评论:0

简介

本文用示例介绍使用对密码进行加密的算法:bcrypt。

bcrypt是一种自带盐值(自动加盐)的加密方案。

bcrypt加密原理

加密过程

先随机生成saltsalt跟password进行hash

注意

对于同一个密码,每次生成的hash是不同的hash中包含了salt

校验过程

从hash中取出saltsalt跟password进行hash计算将得到的hash跟数据库中提取的的hash进行比对返回boolean类型:true/fal

bcrypt与md5的区别

项md5bcrypt密文长度32位60位安全性安全性差。
密码相同时,加密后密文一样。
提升安全性的方案:加密前生成随机的盐值(字符串),将它与密码拼接,然后再使用md5加密。安全性好。
密码相同时,生成的密文是不一样的。(因为它自动生成随机盐值)加密耗时短略长

示例

1、引入依赖

pom.xml加入如下依赖:

<dependency>    <groupid>org.mindrot</groupid>    <artifactid>jbcrypt</artifactid>    <version>0.4</version></dependency>

总的pom.xml:

<?xml version="1.0" encoding="utf-8"?><project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="/d/file/titlepic/xmlschema-instance"         xsi:schemalocation="http://maven.apache.org/pom/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelversion>4.0.0</modelversion>    <parent>        <groupid>org.springframework.boot</groupid>        <artifactid>spring-boot-starter-parent</artifactid>        dnf连接失败<version>2.3.0.relea</version>        <relativepath/> <!-- lookup parent from repository -->    </parent>    <groupid>com.example</groupid>    <artifactid>demo_springboot</artifactid>    <version>0.0.1-snapshot</version>    <name>demo_springboot</name>    <description>demo project for spring boot</description>     <properties>        <java.version>1.8</java.version>    </properties>     <dependencies>        <dependency>            <groupid>org.springframework.boot</groupid>            <artifactid>spring-boot-starter-web</artifactid>        </dependency>         <dependency>            <groupid>org.mindrot</groupid>            <artifactid>jbcrypt</artifactid>            <version>0.4</version>        </dependency>     </dependencies>     <build>        <plugins>            <plugin>                <groupid>org.springframework.boot</groupid>                <artifactid>spring-boot-maven-plugin</artifactid>     去下眼袋           <version>2.3.0.relea</version>            </plugin>        </plugins> 历史教师资格证   </build> </project>

2、写测试类

package com.example.controller; import org.mindrot.jbcrypt.bcrypt;import org.springframework.web.bind.annotation.getmapping;import org.springframework.web.bind.annotation.restcontroller; @restcontrollerpublic class hellocontroller {    @getmapping("/test")    public string test() {        string password = "123456";         // 加密        string encodedpassword = bcrypt.hashpw(password, bcrypt.gensalt());        system.out.println(encodedpassword);         // 使用正确密码验证密码是否正确        boolean flag = bcrypt.checkpw(password, encodedpassword);        system.out.println(flag);         // 使用错误密码验证密码是否正确        flag = bcrypt.checkpw("111222", encodedpassword);        system.out.println(flag);         system.out.println("-------------------------------------------");         return "test success";    }}

3、测试

访问:http://localhost:8080/test/

多次访问后的后端结果:

$2a$10$63i66gocxnciufbhezcbf.luba45jcfwatvxz7mtzp7bpd绍兴县实验小学n.sqmsg
true
fal
————双曲线实轴——————————-
$2a$10$cv7it/tpzvx23idevmhhlersnippi2n/s..cl9bd50v2lfdff1woa
true
fal
——————————————-
$2a$10$wntnhuedcx0inkaflqwm0o9m163wrr/rcgldbsfhrgzjqubzoeeeg
true
fal
——————————————-

密文含义

示例密文:

$2a$10$cv7it/tpzvx23idevmhhlersnippi2n/s..cl9bd50v2lfdff1woa

$:分割符,无意义;

2a:bcrypt加密版本号;

10:cost的值(默认值);

之后的22位:salt值;

之后:密码的密文

到此这篇关于java使用bcrypt实现对密码加密效果详解的文章就介绍到这了,更多相关java bcrypt密码加密内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-06 04:10:45,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/99836a0e559cdf417995c8a3bea40b1c.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Java使用bcrypt实现对密码加密效果详解.doc

本文 PDF 下载地址:Java使用bcrypt实现对密码加密效果详解.pdf

标签:密码   示例   安全性   绍兴县
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图