gpt4 book ai didi

sha1 - 如何从 LDAP 中检索盐?

转载 作者:行者123 更新时间:2023-12-04 01:44:41 49 4
gpt4 key购买 nike

我工作的组织使用 PPolicy(一个 OpenLDAP 模块)来自动加盐和散列密码。不幸的是,我无法访问运行 OpenLDAP 服务器的机器,所以我无法查看配置文件。从我所看到的情况来看,几乎所有内容似乎都是使用默认设置进行设置的。

我希望能够为特定用户检索盐。如果我查看用户的属性,userPassword 是 SSHA 密码。对于该特定用户,我没有看到任何关于盐的信息。我最终查看了 LDAP 模式,也没有看到任何关于盐的信息。

如果您要猜测每个用户的盐存储在哪里,它会在哪里?我知道这是含糊的,可能没有很多信息,但是我在 OpenLDAP 文档中找不到任何地方来解释唯一盐的确切存储位置。也许以前配置过 OpenLDAP 服务器的人会知道默认位置在哪里。

谢谢你。

最佳答案

Syon 的帖子对我帮助很大,谢谢!我认为对于在这个主题上苦苦挣扎的其他人来说,工作测试会是一个很好的补充;)。

public class SshaPasswordVerifyTest {
private final static int SIZE_SHA1_HASH = 20;

@Test
public void itShouldVerifyPassword() throws Exception{
String password = "YouNeverGuess!";
String encodedPasswordWithSSHA = "{SSHA}M6HeeJAbwUCzuLwXbq00Fc3n3XcxFI8KjQkqeg==";
Assert.assertEquals(encodedPasswordWithSSHA, getSshaDigestFor(password, getSalt(encodedPasswordWithSSHA)));
}

// The salt is the remaining part after the SHA1_hash
private byte[] getSalt(String encodedPasswordWithSSHA){
byte[] data = Base64.getMimeDecoder().decode(encodedPasswordWithSSHA.substring(6));
return Arrays.copyOfRange(data, SIZE_SHA1_HASH, data.length);
}

private String getSshaDigestFor(String password, byte[] salt) throws Exception{
// create a SHA1 digest of the password + salt
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(password.getBytes(Charset.forName("UTF-8")));
crypt.update(salt);
byte[] hash = crypt.digest();

// concatenate the hash with the salt
byte[] hashPlusSalt = new byte[hash.length + salt.length];
System.arraycopy(hash, 0, hashPlusSalt, 0, hash.length);
System.arraycopy(salt, 0, hashPlusSalt, hash.length, salt.length);

// prepend the SSHA tag + base64 encode the result
return "{SSHA}" + Base64.getEncoder().encodeToString(hashPlusSalt);
}
}

关于sha1 - 如何从 LDAP 中检索盐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17733040/

49 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com