Passwords hybris如何存储密码哈希

Passwords hybris如何存储密码哈希,passwords,hybris,password-hash,password-storage,Passwords,Hybris,Password Hash,Password Storage,TLDR:在将密码散列存储到数据库之前,Hybris如何处理密码散列?因为数据库字段中的值不是标准密码哈希 我不得不添加上面的TLDR,因为两个用户发布的答案表明他们没有阅读(或理解)这个问题 我和海布里斯1905一起工作。当我在backoffice中设置用户密码时,我可以选择散列算法的类型,包括MD5、SHA-256和其他一些。然而,数据库中存储的密码值显然不是该算法的简单散列。例如,下面是密码的散列test1234,使用各种散列算法: 盐渍MD5:1:Gtjd5QVM/t0HLT5PvZ

TLDR:在将密码散列存储到数据库之前,Hybris如何处理密码散列?因为数据库字段中的值不是标准密码哈希


我不得不添加上面的TLDR,因为两个用户发布的答案表明他们没有阅读(或理解)这个问题

我和海布里斯1905一起工作。当我在backoffice中设置用户密码时,我可以选择散列算法的类型,包括MD5、SHA-256和其他一些。然而,数据库中存储的密码值显然不是该算法的简单散列。例如,下面是密码的散列
test1234
,使用各种散列算法:

  • 盐渍MD5:
    1:Gtjd5QVM/t0HLT5PvZCU4g==s9B8Vw/BIkzixwzMzueRR1R6WY9y8Fq9BqFqwGIuY2fGK+KFYSXjNf5G0fbAlb9u
  • SHA-256:
    1:etvHTnwzMfX/DnbNPhmQBA==8jq6sLLcb/PrIhVB9D+YA61L2mr0dlBYr/84G/K9Kzqe4gpvPF10ja8RaIE94b3A+joszlMutGrHezDs871A/8Yr4oVhJeM1/kbR9sCVv24=
  • SHA-512:
    1:ZSaQW0C+r/NMVWRVTCM9W==4QJDMVU4PE02IPY0MVKP2SB+BmumHtimive2M6NESzV2EFG2O1MijkZfues6f7jzovoeuVMD/E8mqooogbl9rpkopmemeJ5eJ5EPB2iued3uaoulVv6pucyfjGjdorSzJWO2LJ30IoKy4RsG0OkxyUgUg2Ug7x1augh+EwFb9U
  • PBKDF2(HMAC−SHA1):
    1:HIKWvUwTA/pVC9mXzl9qgw==nosr8pknuibegoiwfa5oarnlefznalk0cuzk7dxtxhbtby+7w3ml1p8hnmxjalq1a/tSvlb+gwZMRS4Q7ncMhU5w1b6HwV+bgebgebg9ecqu7mnzlbh9m50mr2avqn7fvj5e3c4c4v4v4h8fdsxmmxkkywk91/c4wkqwkqwkwqqwqwqg9vw=>
  • BCrypt:
    1:GL1kPl93Nx4RjOymIhC1Kw==XH9ZDDGPIXQPICPCEVJ+BRHAPEYWVPKXTLsygzokuo4KTC/vh4weA6hrMEebtQC/OttaVzG3+9tUCHxFHCcw=
显然,这是Hybris在所选哈希算法之上的某种编码,但是它是什么?它是编码(即可以解码)还是散列

我需要将一个大型用户数据库从另一个平台迁移到这个Hybris安装。我有现有的用户名和相应的哈希密码,我想导入它们。这些是标准的bcrypt哈希,因此相同的
test1234
字符串将具有哈希
$2y$16$mK9cm.pwOp8ve9oH0VqkT.123HGy/RHYLcd1GB.N5zEqBylV.22wm
。然而,我很难理解如何将这个散列导入Hybris用户表。

。SAP Commerce中的默认策略是
PBKDF2
。必要时,您可以通过
default.password.encoding
属性对其进行更改。
您还可以通过实现
PasswordEncoder
接口和
core.passwordEncoderFactory
bean来更正我的答案。

要更正我的答案,Hybris始终使用用户名和密码的组合创建哈希

--->PasswordEncoderFactoryImpl类负责根据编码输入提供正确的编码器类。 --->factory.getEncoder(encoding).encode(user.getUID(),密码)

Hybris支架

您可以使用已经存在的测试用户进行测试,并且知道密码以生成基于哈希键的algo并匹配编码的密码,它应该给出相同的结果

--->要验证它,只需编写简单的groovy和groovy的输出,就可以通过后台与groovy中使用的测试用户进行比较,并比较编码的密码。 这里的编码是pbkdf2

在将密码散列存储到 数据库因为数据库字段中的值不是标准值 密码散列

这是因为
encodedPassword
属性是用
encrypted=“true”
修饰符声明的。由于hybris在存储到DB之前加密值。了解更多有关hybris的信息及其工作原理

 <attribute autocreate="true" qualifier="encodedPassword" type="java.lang.String">
            <persistence type="property" qualifier="Passwd">
                <columntype>
                    <value>HYBRIS.LONG_STRING</value>
                </columntype>
            </persistence>
            <modifiers read="true" write="true" search="true" optional="true" encrypted="true"/>
        </attribute>

这与我的问题无关。请再读一遍,希望你能理解我的问题。这与我的问题无关。我想问的是,在使用所选算法创建散列之后,hybris对散列做了什么。存储的散列不是md5或bcrypt,而是完全不同的东西。此外,密码无法解密,它们是单向散列的,因此您的建议是pointess@AleksG,我已经修改了答案,也许这将帮助您理解在Hybris中创建哈希的过程。我确实理解这个流程。我想知道的是创建散列后hybris会做什么,因为数据库中存储的散列不是标准的pbkdf2、bcrypt、md5等格式。生成的散列也会按照进行加密,所以它不是按照标准生成的散列!这是有道理的。我不明白为什么我需要更改编码器或让用户重置密码。我创建了一个新的编码器并将其添加到系统中。现在,当我在backoffice中查看用户记录时,我可以选择我的新编码器作为密码-因此我应该能够按原样导入用户(我猜使用带有
encodedPassword
字段的impex),如果您想在整个项目中使用自定义编码器,您不需要强制用户更新密码,但稍后,如果您想坚持使用OOTB提供的编码器,那么您可以重定向用户以重置密码,并使用OOTB编码器设置新密码。Hybris允许不同的用户使用不同的编码器。实际上,“用户”模型中有一个属性,叫做“密码编码”。因此,为导入的用户保留自定义编码器没有什么错,但为新用户或稍后重置密码时使用OOTB编码器。是的,我知道。但我建议在所有用户中使用统一的编码器,这使我们的生活更容易进一步迁移/升级