是否可以将 linux salted sha512 密码哈希转换为 LDAP 格式?

use*_*869 5 password ldap character-encoding base64

我们有一个存储密码和其他用户数据的 LDAP 服务器。
尽管服务器不用于客户端计算机的身份验证,但仅用于客户端应用程序的身份验证。
所以用户在他们的客户端本地更改他们的密码。
只要我们使用 crypt,我就可以在 LDAP 中将 linux 哈希存储为 {CRYPT}$hash 并且它运行良好。
现在密码存储为加盐的 sha512 哈希值
,/etc/shadow 中的密码格式如下:

printf( "$6$%s$%s", $salt, $hash )  
Run Code Online (Sandbox Code Playgroud)

$salt 似乎只是一个 ASCII 字符串,
我认为 $hash 是 $plainPW 和 $salt 串联的 sha512 摘要的 base64 编码结果,但我不确定。

LDAP 存储密码哈希是这样的:

printf( "{SSHA512}%s", $_96byteString )  
Run Code Online (Sandbox Code Playgroud)

其中 $_96byteString 是 $saltedPWhash 和 $salt 的 512 位连接的 base64 编码结果

我试图对 $hash 进行 base64_decode,附加 $salt,base64_encode 结果并将其存储为上述 LDAP 格式的 $_96byteString。
唉 LDAP 无法通过此验证,一个简单的 ldapbind 就失败了。

有人知道如何转换 linux sha512 哈希值以便 LDAP 服务器接受它为有效吗?

我发现 linux crypt 使用与标准 mime 不同的 base64 编码。
该标准使用 [A-Za-z0-9+/] 而 crypt 使用 [./0-9A-Za-z]。
所以我尝试用 tr 进行转换,但结果仍然失败:-(

Eir*_*Nym 0

简而言之,答案是否定的,如果您不知道原始密码并且不使用暴力或任何其他攻击,则无法直接将一个密码哈希重新编码为另一个密码哈希。但是您可以构建透明层,如果密码正确,则转换哈希值。

这个问题已经被问过很多次了,就像这里一样

在我的软件中,我使用passlib库,它可以在没有我拦截的情况下执行此操作。