密码哈希函数Bcrypt的最大密码长度限制

原创 2017年03月09日 21:30:25

密码哈希函数Bcrypt的最大密码长度限制

Bcrypt是一个很流行的密码哈希算法,是Niels Provos和DavidMazières基于Blowfish加密算法设计的密码哈希算法,于1999年在USENIX协会上提交。Bcrypt在设计上包含了一个盐Salt来防御彩虹表攻击,还提供了一种自适应功能,可以随着时间的推移,通过增加迭代计数以使其执行更慢,使得即便在增加计算能力的情况下,Bcrypt仍然能保持抵抗暴力攻击。

Bcrypt是OpenBSD和SUSE Linux等操作系统默认的密码哈希算法。但是在使用Bcrypt算法的实现时,要注意它有最大密码长度限制,通常为50~72字符,准确的长度限制取决于具体的Bcrypt实现。超过最大长度的密码将被截断。

下面使用Spring Security的BCryptPasswordEncoder为例:

BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
// 72 字符
String password1 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
// 73 字符
String password2 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab";
String encodedPassword1 = passwordEncoder.encode(password1);
boolean matches = passwordEncoder.matches(password2, encodedPassword1);
System.out.println("encodedPassword1: " + encodedPassword1);
System.out.println("matches: " + matches);

当运行程序时,会输出这样的结果:

encodedPassword1: $2a$10$A5OpVKgjEZzmy6UNsqzkjuG2xGET1wp3b/9ET5dz/tHQ3eRvyXSSO
matches: true

这证明了Password字符串超过72字符的部分被截断丢弃了。

要解决Bcrypt密码算法72字符长度限制的问题,可以这样:
先使用SHA-256算法对字符串进行加密,再使用Bcrypt算法加密,用伪码示意如下:

hashpw(sha256('password'), salt);
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。

Java通过BCrypt加密

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

使用BCrypt算法加密存储登录密码用法及好处

//导入import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** *使用BCrypt算法加密存储登录密码...

EditText的清空 查看密码 限制输入空格 最大字数

总结了一下项目的时候用到EditText的时候经常需要用到的一些功能 EditText的清空  查看密码   限制输入空格 最大字数 上面功能我全部使用的是自定义EditText来实现,这样使用也比较...

Spring Security 4 整合Hibernate Bcrypt密码加密(带源码)

【相关已翻译的本系列其他文章,点击分类里面的spring security 4】 【剩余文章,将尽快翻译完毕,敬请期待。 翻译by 明明如月 QQ 605283073】 原文地址:http://web...

JAVA,导出CSV,设最大行数限制,使用winzipaes压缩成带密码的zip文件

由于工作需要,导出CSV功能,太大的话要分成多个,并且导出文件要压缩成带密码的zip。 JAVA本身的ZIP输入输出流是支持多个文件的,但是没有设置密码功能。 网上搜索了很久,最后选择使用开源的w...

对用用户密码的保存方式之BCrypt加密方式

在需要用户模块的项目中,对于用户密码的保存,一般不会使用明文保存,这样是不安全的。通常情况下,我们都需要对密码进行不可逆的加密,然后存放在数据库中。然后在用户登录的时候,把其输入的密码进行加密与数据库...

GET与POST传递数据的最大长度限制

get 是通过URL提交数据,因此GET可提交的数据量就跟URL所能达到的最大长度有直接关系。URL不存在参数上限的问题,HTTP协议规范也没有对URL长度进行限制。这个限制是特定的浏览器及服务器对...
  • lxcboke
  • lxcboke
  • 2016年05月18日 14:44
  • 7042

Get方法提交URL的最大长度限制(转)

这个问题一直以来似乎是被N多人误解,其实Http Get方法提交的数据大小长度并没有限制,而是IE浏览器本身对地址栏URL长度有最大长度限制:2083字符。 详情见: 1.http://suppo...

EditText输入限制:整数,小数,最大值,最大字符长度,手机号

Android EditText输入限制:整数,小数,最大值,最大字符长度,手机号
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:密码哈希函数Bcrypt的最大密码长度限制
举报原因:
原因补充:

(最多只允许输入30个字)