原因:java.lang.IllegalArgumentException:盐修订无效

Caused by: java.lang.IllegalArgumentException: Invalid salt revision

当用户从我的 java 注册时,我已经使用 JavaSymfony 创建了一个大学项目他可以同时使用 java 和 symfony 登录的应用程序,但相反,这是不可能的,它只能从 symfony 登录,并在 java

中向我显示此错误
Caused by: java.lang.IllegalArgumentException: Invalid salt revision

加密方法:Bcrypt Security.yml 符号

        App\Entity\Utilisateur: 
        algorithm: bcrypt
        encode_as_base64: false
        iterations: 1

实用者实体

 /**
 * Returning a salt is only needed, if you are not using a modern
 * hashing algorithm (e.g. bcrypt or sodium) in your security.yaml.
 *
 * @see UserInterface
 */
public function getSalt(): ?string
{
    return null;
}

JAVA

登录方式

 if (rs.getString("email").equals(t.getEmail()) && BCrypt.checkpw(t.getMotpasse(), rs.getString("motpasse")) == true) {
                    if (rs.getString("activated").equals("Active")) {
                        idUser = rs.getInt("idU");

有关此错误检查的详细信息BCrypt.checkpw() Invalid salt version exception

我建议您开始调试以下代码片段:

BCrypt.checkpw(t.getMotpasse(), rs.getString("motpasse"))

在您的数据库中检查散列密码的值是多少。 它是否与 $xy$... 的预期值匹配,其中 xy 应该是 2a2b2y 或类似的值。

检查您的 Java 代码密码 t.getMotpasse() 和散列密码 rs.getString("motpasse") 的值是什么;记录 them/debug 代码。

确保检查 documentation,确保您以正确的顺序提供 checkpw 的参数(plain, hashed 而不是 hashed, plain)。

但我怀疑您的 PHP 库生成了您当前的 java 库不支持的较新的 salt 版本(修订版)。例如参见 [​​=25=]

我能找到的一些 code examples 在 salt 版本不是 2a 时抛出这个异常,这可以解释为什么从 Java 生成的盐有效,但是从 [=56] =] 不要。

在这种情况下,您要么必须:

  • 确保 PHP 代码生成盐版本 2a
  • upgrade/change 将 Java BCrypt 库升级到支持更新的 salt 修订版的版本