Java通过BCrypt加密

Wesley13
• 阅读 883
一、概述

 

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

目前,MD5和BCrypt比较流行。相对来说,BCrypt比MD5更安全,但加密更慢。
 
二、使用BCrypt
 
首先,可以在官网中取得源代码http://www.mindrot.org/projects/jBCrypt/
然后通过Ant进行编译。编译之后得到jbcrypt.jar。也可以不需要进行编译,而直接使用源码中的java文件(本身仅一个文件)。
下面是官网的一个Demo。
Java通过BCrypt加密
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");   } }

Java通过BCrypt加密

 

在这个例子中,
 
BCrypt.hashpw(password, BCrypt.gensalt())
是核心。通过调用BCrypt类的静态方法hashpw对password进行加密。第二个参数就是我们平时所说的加盐。
 
BCrypt.checkpw(candidate, hashed)
该方法就是对用户后来输入的密码进行比较。如果能够匹配,返回true。
 
三、加盐
如果两个人或多个人的密码相同,加密后保存会得到相同的结果。破一个就可以破一片的密码。如果名为A的用户可以查看数据库,那么他可以观察到自己的密码和别人的密码加密后的结果都是一样,那么,别人用的和自己就是同一个密码,这样,就可以利用别人的身份登录了。
其实只要稍微混淆一下就能防范住了,这在加密术语中称为“加盐”。具体来说就是在原有材料(用户自定义密码)中加入其它成分(一般是用户自有且不变的因素),以此来增加系统复杂度。当这种盐和用户密码相结合后,再通过摘要处理,就能得到隐蔽性更强的摘要值。
原文地址:https://www.cnblogs.com/xingzc/p/8624007.html
点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
sshpass用法介绍
参考文章:http://www.mamicode.com/infodetail1105345.html1.ssh与sshpass的区别ssh登录需要与用户进行交互,需要用户输入密码sshpass允许使用p参数指定明文密码2.sshpass的用法使用\p参数指定密码sshpassppassw
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
kenx kenx
3年前
Java MD5和SHA256等常用加密算法
前言我们在做java项目开发的时候,在前后端接口分离模式下,接口信息需要加密处理,做签名认证,还有在用户登录信息密码等也都需要数据加密。信息加密是现在几乎所有项目都需要用到的技术,身份认证、单点登陆、信息通讯、支付交易等场景中经常会需要用到加密算法,所谓加密算法,就是将原本的明文通过一系列算法操作变成密文。1.BASE严格地说,属于编码格式,而非加密算法
Wesley13 Wesley13
3年前
Ubuntu 及Ubuntu server版如何启用root用户登录
默认安装Ubuntu都是不允许以root用户进行登录的,想要以root用户进行登录需要进行一些操作,主要是以下几个步骤:第一步以普通用户登录系统,创建root用户的密码,然后输入你要设置的密码,这样就完成了设置root用户密码的步骤第二步修改文件
Stella981 Stella981
3年前
Shiro要点概览与SpringBoot整合实例
1\.简介概念说明Subject主体,简化点说就是用户实体PrincipalSubject的唯一标识,如id、用户名、手机号、邮箱等Credential凭证信息,主体证明自己的东西,如密码、证书等Authenticator认证器,对Subject身份进行认证,例如验证用户的用户名和密码是否匹配Aut
Stella981 Stella981
3年前
Druid数据库连接池 实现数据库账号密码加密
jar包版本:druid1.0.15.jar1\.加密,用以下命令将用户名和密码加密cmd命令行执行javacpdruid1.0.15.jarcom.alibaba.druid.filter.config.ConfigTools加密串得到密文2.用户名解密:packag
Stella981 Stella981
3年前
Spring Security使用详解9(密码加密配置)
在之前的文章中密码都是使用明文的方式进行存储,但这样会有很大的安全隐患。所以正常做系统时,密码都要加密处理。而在SpringBoot中配置密码加密非常容易,下面通过样例进行演示。九、密码加密配置1、样例代码(1)要配置密码加密只需要修改两个地方。首先要修改HttpSecurity配置中的PasswordEncoder
Wesley13 Wesley13
3年前
MySQL数据库函数、DCL详解(及备份恢复操作)
MySQL中的函数<1加密函数password(str)该函数可以对字符串str进行加密,一般情况下,此函数给用户密码进行加密selectpassword('ruochen666');selectPASSWORD(ename)fromemp
Wesley13 Wesley13
3年前
JAVA加解密算法设计与应用
业务场景APP移动端、WEB、桌面端、第三方平台密码等敏感数据加密设计如app端登录密码加密设计对于登录密码不需要进行解密只需要加密算法结合规则进行比较就能得到密码正确与否方法一(签名保证安全)1.密码等敏感信息取Md5值对所有值(加上timestamp)
Wesley13 Wesley13
3年前
JAVA实现AES 解密报错Input length must be multiple of 16 when decrypting with padded cipher
<divid"cnblogs\_post\_body"class"blogpostbody"<h3加密代码</h3<p </p<divclass"cnblogs\_Highlightershgutter"<div<divid"highlighter\_969460"class"syntaxhighlighter