Java通过BCrypt加密过程详解

 更新时间:2019年07月17日 10:36:19   作者:bcombettter   我要评论
这篇文章主要介绍了Java通过BCrypt加密过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

一、概述

在用户模块,对于用户密码的保护,通常都会进行加密。我们通常对密码进行加密,然后存放在数据库中,在用户进行登录的时候,将其输入的密码进行加密然后与数据库中存放的密文进行比较,以验证用户密码是否正确。

目前,MD5和BCrypt比较流行。相对来说,BCrypt比MD5更安全,但加密更慢。

二、使用BCrypt

首先,可以在官网中取得源代码

然后通过Ant进行编译。编译之后得到jbcrypt.jar。也可以不需要进行编译,而直接使用源码中的java文件(本身仅一个文件)。
下面是官网的一个Demo。

public class BCryptDemo {
 public static void main(String[] args) {
   // Hash a password for the first time
     String password = "testpassword";
    String hashed = BCrypt.hashpw(password, BCrypt.gensalt());
    System.out.println(hashed);
  // gensalt's log_rounds parameter determines the complexity
  // the work factor is 2**log_rounds, and the default is 10
  String hashed2 = BCrypt.hashpw(password, BCrypt.gensalt(12));
 
  // Check that an unencrypted password matches one that has
  // previously been hashed
  String candidate = "testpassword";
  //String candidate = "wrongtestpassword";
  if (BCrypt.checkpw(candidate, hashed))
    System.out.println("It matches");
  else
  System.out.println("It does not match");
  }
}

在这个例子中,

BCrypt.hashpw(password, BCrypt.gensalt())

是核心。通过调用BCrypt类的静态方法hashpw对password进行加密。第二个参数就是我们平时所说的加盐。

BCrypt.checkpw(candidate, hashed)

该方法就是对用户后来输入的密码进行比较。如果能够匹配,返回true。

三、加盐

如果两个人或多个人的密码相同,加密后保存会得到相同的结果。破一个就可以破一片的密码。如果名为A的用户可以查看数据库,那么他可以观察到自己的密码和别人的密码加密后的结果都是一样,那么,别人用的和自己就是同一个密码,这样,就可以利用别人的身份登录了。

其实只要稍微混淆一下就能防范住了,这在加密术语中称为“加盐”。具体来说就是在原有材料(用户自定义密码)中加入其它成分(一般是用户自有且不变的因素),以此来增加系统复杂度。当这种盐和用户密码相结合后,再通过摘要处理,就能得到隐蔽性更强的摘要值。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java 实现将一个string保存到txt文档中

    java 实现将一个string保存到txt文档中

    今天小编就为大家分享一篇java 实现将一个string保存到txt文档中的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Hibernate hql查询代码实例

    Hibernate hql查询代码实例

    这篇文章主要介绍了Hibernate hql查询代码实例,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • java实现随机生成UUID

    java实现随机生成UUID

    这篇文章主要介绍了java实现随机生成UUID的函数代码,有需要的小伙伴可以参考下。
    2015-07-07
  • SpringMVC入门实例

    SpringMVC入门实例

    这篇文章主要介绍了SpringMVC入门实例,在springmvc入门教程里算是比较不错的,结构也比较完整,需要的朋友可以参考。
    2017-11-11
  • java 内部类的详解及实例

    java 内部类的详解及实例

    这篇文章主要介绍了 java 内部类的详解及实例的相关资料,这里提供了两种内部类的实现方法,并给出实例,需要的朋友可以参考下
    2017-08-08
  • Spring AOP的几种实现方式总结

    Spring AOP的几种实现方式总结

    本篇文章主要介绍了Spring AOP的几种实现方式总结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • SpringBoot配置https实操方法

    SpringBoot配置https实操方法

    在本篇文章里小编给大家整理的是关于SpringBoot配置https实操方法以及相关知识点,需要的朋友们参考下。
    2019-11-11
  • spring-boot-klock-starter V1.1 主体功能重大更新内容介绍

    spring-boot-klock-starter V1.1 主体功能重大更新内容介绍

    这篇文章主要介绍了spring-boot-klock-starter V1.1 主体功能重大更新内容描述,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Java模拟扑克牌洗牌实现生成52张扑克的方法示例

    Java模拟扑克牌洗牌实现生成52张扑克的方法示例

    这篇文章主要介绍了Java模拟扑克牌洗牌实现生成52张扑克的方法,涉及Java数组遍历、重排及输出等相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • spring boot容器启动流程

    spring boot容器启动流程

    spring cloud是基于spring boot快速搭建的,今天咱们就看看spring boot容器启动流程,需要的朋友跟随脚本之家小编一起学习吧
    2018-01-01

最新评论