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

 更新时间:2017年03月11日 10:18:11   作者:资深架构师  
这篇文章主要介绍了密码哈希函数 Bcrypt的最大密码长度限制详解的相关资料,需要的朋友可以参考下

密码哈希函数 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);

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • 初步了解代理和负载均衡

    初步了解代理和负载均衡

    本文主要初步带你了解代理和负载均衡的知识,文中对正向、反向代理以及反向代理与负载均衡的关系等做了详细讲解,感兴趣的朋友可以参考一下这篇文章
    2021-09-09
  • 详解软件系统稳定性的三大秘密

    详解软件系统稳定性的三大秘密

    随着软件复杂性越来越高,稳定性的保障越来越难,随着服务规模越来越大,稳定性的重要性越来越高。工程师在设计和开发软件的时候,要坚持底板思维。
    2021-05-05
  • 汇编语言无效指令错误概述

    汇编语言无效指令错误概述

    此错误仅适用于奔腾 处理器、奔腾处理器与MMX技术、奔腾OverDrive处理器 和奔腾OverDrive处理器带有MMX技术。 奔腾Pro处理器, 奔腾II处理器和i486及更早版本处理器不受影响
    2012-07-07
  • 密码哈希函数 Bcrypt的最大密码长度限制详解

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

    这篇文章主要介绍了密码哈希函数 Bcrypt的最大密码长度限制详解的相关资料,需要的朋友可以参考下
    2017-03-03
  • HTTP中ETag语法及使用实战详解

    HTTP中ETag语法及使用实战详解

    这篇文章主要为大家介绍了HTTP中ETag语法及使用实战详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 分享下手机软件界面设计浅析

    分享下手机软件界面设计浅析

    手机的软件系统已成为用户直接操作和应用的主体,它应以美观实用、操作便捷为用户所青睐。用户界面设计的规范性显得尤为重要
    2014-05-05
  • 作为程序员必须了解的缩写和专业名词

    作为程序员必须了解的缩写和专业名词

    这篇文章主要介绍了作为程序员必须了解的缩写和专业名词,文中讲解非常详细,对想学编程的朋友有所帮助,感兴趣的可以了解下
    2020-07-07
  • Sqoop的安装与使用详细教程

    Sqoop的安装与使用详细教程

    Sqoop是一款开源的工具,主要用于在Hadoop与传统数据库间进行数据的传递,这篇文章主要介绍了Sqoop的安装与使用详细教程,需要的朋友可以参考下
    2021-04-04
  • 好玩又实用的查看函数图像网站Desmos

    好玩又实用的查看函数图像网站Desmos

    这个网站的最大优点,就是省去了安装数学绘图软件或计算软件的麻烦,只要打开浏览器就能使用了。看了介绍之后,可别忘了把这个好网站加到书签
    2021-08-08
  • git merge --ff/--no-ff/--ff-only 三种选项参数的区别解析

    git merge --ff/--no-ff/--ff-only 三种选项参数的区别解析

    这篇文章主要介绍了git merge --ff/--no-ff/--ff-only 三种选项参数的区别解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04

最新评论