bCrypt's javadoc提供了如何加密密码的代码:

String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); 

要判断明文密码是否与先前已散列的密码匹配,请使用checkpw方法:

if (BCrypt.checkpw(candidate_password, stored_hash))
    System.out.println("It matches");
else
    System.out.println("It does not match");

这些代码片段对我来说意味着随机生成的盐被扔掉了.是这样,还是这只是一个误导性的代码片段?

推荐答案

SALT被合并到散列中(以Base64样式格式编码).

例如,在传统的Unix密码中,salt存储为密码的前两个字符.剩下的字符代表哈希值.checker函数知道这一点,并将散列分开以取出盐.

Java相关问答推荐

Gmail Javi API批量处理太多请求

无法运行Java(已解决)

当切换javaFX场景时,stage的大小正在Minimize

在Java中测试DAO方法:假实现与内存数据库

Java 21 struct 化连接货币,需要可预知的子任务异常排序

JavaFX如何在MeshView中修复多个立方体?

蒙蒂霍尔比赛结果不正确

安装Java Jar应用程序的Install4j遇到ClassNotFoundException的运行时错误

具有阻塞方法的开源库是否应该为执行提供异步选项?

内存和硬盘中的Zip不同,这会导致下载后的Zip损坏

有效的公式或值列表必须少于或等于255个字符

将JSON字符串转换为Java类

在macOS上读取文件会导致FileNotFound,即使文件存在(并且具有权限)

Java堆中的许多java.time.ZoneRegion实例.ZoneId实例不应该被缓存吗?

如何在透视表中添加对计数列的筛选?

如何生成指定范围内的11位序列号?

Java在操作多个属性和锁定锁对象时使用同步和易失性

将双倍转换为百分比

为了安全起见,有必要复制一份 list 吗?

Java 21保护模式的穷尽性