当前位置: 首页 > 编程笔记 >

Java通过BCrypt加密过程详解

纪勇军
2023-03-14
本文向大家介绍Java通过BCrypt加密过程详解,包括了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使用Cipher类实现加密的过程详解,包括了Java使用Cipher类实现加密的过程详解的使用技巧和注意事项,需要的朋友参考一下 一、先看一个简单加密,解密实现 1.1 加密 1.2 解密 1.3 代码解释 上面简单实现了AES("AES/CBC/PKCS5Padding")的加密和解密。可以看到代码中主要的是cipher对象,并有以下调用 (1)新建Cipher对象时需要传

  • 本文向大家介绍JAVA中AES对称加密和解密过程,包括了JAVA中AES对称加密和解密过程的使用技巧和注意事项,需要的朋友参考一下 AES对称加密和解密代码详细介绍,供大家参考,具体内容如下  测试结果: 使用AES对称加密,请输入加密的规则 使用AES对称加密 请输入要加密的内容: 使用AES对称加密 根据输入的规则使用AES对称加密加密后的密文是:Z0NwrNPHghgXHN0CqjLS58Y

  • 本文向大家介绍java代码实现MD5加密及验证过程详解,包括了java代码实现MD5加密及验证过程详解的使用技巧和注意事项,需要的朋友参考一下 MD5加密 在我们的程序中,不管是什么,都会有安全问题,今天就说的是MD5加密的方法 MD5是哈希算法,也就是 从明文A到密文B很容易,但是从密文B到明文A几乎不可能 也就是说,给你密文,是几乎无法通过解密来得到明文的。 这个一般用于存储密码。也就是数据库

  • 本文向大家介绍如何通过Java实现加密、解密Word文档,包括了如何通过Java实现加密、解密Word文档的使用技巧和注意事项,需要的朋友参考一下 前言 对一些重要文档,我们为保证其文档内容不被泄露,常需要对文件进行加密,查看文件时,需要正确输入密码才能打开文件。下面介绍了一种比较简单的方法给Word文件加密以及如何给已加密的Word文件解除密码保护。 使用工具:Free Spire.Doc fo

  • 问题内容: 如果我有: 我可以毫无问题地打开安全连接。 但是,我想将证书直接存储在战争中,因此我使用:(文件输入流最终将变成资源流,但是我正在这样做以使其正常工作。) 现在,如果我打开相同的连接,则会得到: 问题答案: 为了后代的缘故,所有这些都太复杂了,我们几乎只在静态块中进行了检查:

  • 我有一个网页,使用bcrypt加密用户名密码,这些密码然后存储在数据库中。我有一个运行在QT上的C++程序,它需要对用户进行身份验证,为了做到这一点,我必须加密用户输入的密码,并将其与数据库中的密码进行比较。这是正确的做法吗?如果是的话,我该如何做到这一点?用户输入的密码的加密必须与bcrypt的加密相同,我如何做到这一点?提前道谢。