Passwords hybris如何存储密码哈希
TLDR:在将密码散列存储到数据库之前,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,因为两个用户发布的答案表明他们没有阅读(或理解)这个问题 我和海布里斯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=
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编码器。是的,我知道。但我建议在所有用户中使用统一的编码器,这使我们的生活更容易进一步迁移/升级