Spring boot Spring引导密码bcrypt编码器:编码值不';与在线生成的不匹配

Spring boot Spring引导密码bcrypt编码器:编码值不';与在线生成的不匹配,spring-boot,bcrypt,spring-ldap,Spring Boot,Bcrypt,Spring Ldap,在SpringBoot2项目中,我使用bcrypt密码编码器根据LDAP目录对用户进行身份验证。密码以散列形式存储在LDIF文件中,因此以bcrypt存储在目录中。为了确定需要存储在LDIF文件中的每个密码的哈希值,以便加载到目录中,我使用以下生成器: 因此,我为用户密码生成哈希,并将生成的值存储在LDIF文件中。然后,我尝试使用SpringLDAP密码比较执行身份验证。但是身份验证失败,因为Spring和提到的站点为同一密码计算不同的bcrypt哈希 当然,使用Spring encode()函

在SpringBoot2项目中,我使用bcrypt密码编码器根据LDAP目录对用户进行身份验证。密码以散列形式存储在LDIF文件中,因此以bcrypt存储在目录中。为了确定需要存储在LDIF文件中的每个密码的哈希值,以便加载到目录中,我使用以下生成器:

因此,我为用户密码生成哈希,并将生成的值存储在LDIF文件中。然后,我尝试使用SpringLDAP密码比较执行身份验证。但是身份验证失败,因为Spring和提到的站点为同一密码计算不同的bcrypt哈希

当然,使用Spring encode()函数计算的散列值是可行的。因此,我的问题是:

  • 为什么使用具有相同输入值和相同参数的相同算法时,两个应该等效的实现会提供不同的结果
  • 既然Spring似乎没有提供任何生成器,并且公共生成器生成的值与Spring计算的值不匹配,那么应该如何生成哈希值呢
  • 非常感谢

    尼古拉斯

    为什么使用具有相同输入值和相同参数的相同算法时,两个应该等效的实现会提供不同的结果

    bcrypt为相同的输入生成不同的输出是正常的(例如,请参见),因此需要不同的散列

    既然Spring似乎没有提供任何生成器,那么应该如何生成哈希值呢

    Spring Boot的CLI包括一个
    encodepassword
    命令,可用于生成bcrypt编码的密码:

    $ spring encodepassword secret
    {bcrypt}$2a$10$bhY3U6LEvbJ7DdWrcPqBu.vtLFPqDCgDGpTmyWrAVBcMANQzI/4Xy
    

    报告与
    $2a$10$bhY3U6LEvbJ7DdWrcPqBu.vtLFPqDCgDGpTmyWrAVBcMANQzI/4Xy
    机密

    的匹配项,感谢您的回复。spring密码是什么类型的命令?应该如何安装,从哪里安装,等等。因为我在找它,所以什么也没找到。您好,NicolasIt是Spring Boot的CLI提供的命令。您可以学习如何在中安装CLI。LDAP“比较”操作将不起作用,因为它需要精确匹配,并且(正如您所观察到的)bcrypt每次使用不同的salt并生成不同的哈希。我认为LDAP服务器需要在本地支持bcrypt哈希,以便与“绑定”身份验证一起使用。