hybris 如何存储密码哈希值

How does hybris store password hashes

TLDR: Hybris 在将密码哈希存储到数据库之前对它们做了什么?因为数据库字段中的值不是标准密码哈希值。


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

我正在使用 Hybris 1905。当我在后台设置用户密码时,我可以选择哈希算法的类型,包括 MD5、SHA-256 和其他一些。然而,存储在数据库中的密码值显然不是算法的简单散列。例如,这里是密码 test1234 的散列值,具有各种散列算法:

很明显,这是 Hybris 在选定的哈希算法之上放置的某种编码 - 但它是什么?它是编码(即可以解码)还是散列?

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

Hybris always stores passwords in an encoded format。 SAP Commerce 中的默认策略是 PBKDF2。必要时,可以通过default.password.encoding属性进行更改。 你也可以implement your own password encoding strategy by implementing the PasswordEncoder interface and adding the custom password encoding strategy beancore.passwordEncoderFactory bean.

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

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

Hybris 支持

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

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

What does Hybris do with password hashes before storing them in the database? Because values in the database field are NOT standard password hashes.

这是因为 encodedPassword 属性用 encrypted="true" 修饰符声明。由于 hybris 在存储到数据库之前加密了值。详细了解 Transparent Attribute Encryption (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 编码器更新密码编码,以便生成新的哈希值。

其他参考文献, 2