0

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


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

我正在使用 Hybris 1905。当我在后台设置用户密码时,我可以选择散列算法的类型,包括 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/NMVwRRVTCm9w==4qQJdmvU4PE02ipY0Mvkp2sb+bMuMHTiMIVE2m6NESzv2BEFG2O1MIjkzFUES6f7jzoVOEuVmd/E8mqOUoogbL9rpkOPmeMEj5EpB2iued3UAouLvv6PuUCyFJGJdoRsZJzwO2Lj30iokY4RsG0OKXYuGdUjNYU7X1AUggH+eWfGK+KFYSXjNf5G0fbAlb9u
  • PBKDF2 (HMAC-SHA1):1:HIKWvUwTA/pVC9mXzl9qgw==NOsr8pkNUIbEGoiWFa5oArnlEfZNALK0cuczK7dxtxHbDTby+7w3ml1pf8HNmXjalq1A/tSvlb+gwZMRS4Q7ncMhU5w1b6HwV+BGEBG9ecqahzUOK7mNZrLbh9t50M0mRr2AVQJnn7bfvdJ5E3C4UPdoN44v1mAgIuC/9RKTnhj/1BhjHqKf1pozhFfoBz8FdSxBQMmKY91/c4VzkinqiSy5wkaWjOSQQuAN9ZoWmvw=
  • BCrypt:1:GL1kPl93Nx4RjOymIhC1Kw==Xh9ZddGPIxUqpipcEvJ+bRHApEyWVPkXtxPlsYgzokUo4ktC/vh4weA6hrMEebtQC/OttaVzG3+9tUCHxFHCcw==

显然,这是 Hybris 在所选散列算法之上的某种编码——但它是什么?它是编码(即可以解码)还是散列?

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

4

3 回答 3

1

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

这是因为用修饰符encodedPassword声明的属性。encrypted="true"由于 hybris 在存储到数据库之前加密值。阅读有关透明属性加密 (TAE)及其在 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>

在您的情况下,您可能需要创建自己的密码编码器并将其设置为所有迁移的用户,以便您的系统设法使用自定义编码器对迁移的用户进行身份验证,然后您可以重定向用户以重置密码。在重置密码流程中,您可以使用新的 OOTB 编码器更新密码编码,以便生成新的哈希。

其他参考文献1 , 2

于 2020-07-29T14:19:30.640 回答
-1

Hybris 始终以编码格式存储密码。SAP Commerce 中的默认策略是PBKDF2. 必要时,您可以通过default.password.encoding属性进行更改。也可以通过实现接口并在bean中添加自定义密码编码策略bean实现自己的密码编码策略PasswordEncodercore.passwordEncoderFactory

于 2020-07-28T22:13:50.367 回答
-1

为了纠正我的答案,Hybris 总是使用用户名和密码的组合创建一个哈希。

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

Hybris 支持在此处输入图像描述

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

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

于 2020-07-29T06:18:19.113 回答