使用Java将加密密码发送到LDAP

时间:2018-10-19 09:16:25

标签: java encryption ldap

我有一个问题,我不知道如何解决。

我从文本文件加载了加密密码(SSHA),并且需要从Java源代码中使用该密码添加用户。

文件示例: e1NTSEF9Ukd6ZEZyanZBZlJGMGs3eGFDOGZxQ3U3QlozcUZXRGJoeWIyS0E9PQ ==

真实密码:123

示例代码无法按我的意愿工作:

String encryptedPSWD = "e1NTSEF9Ukd6ZEZyanZBZlJGMGs3eGFDOGZxQ3U3QlozcUZXRGJoeWIyS0E9PQ==";
attributes.add(new BasicAttribute("userPassword","{SSHA}"+encryptedPSWD);

它不起作用,因为我们只能发送实值密码? 难道这是一种单面加密,LDAP也将无法对其解密吗?

1 个答案:

答案 0 :(得分:0)

来自LDAP服务器的错误号和文本将具有指导意义;但是在一般情况下,有两点很突出:

(1)假设用户已经具有密码,则您正在修改一个现有属性,而不添加属性。如果您尝试将值添加到已经有值的单值属性,或者尝试将值添加到已经存在的多值属性,则会出现ldap错误20。要 modify < / em>现有属性如下所示:

LDAPModificationSet attributes = new LDAPModificationSet();
LDAPAttribute attrUserPassword = new LDAPAttribute("userPassword", "{SSHA}"+encryptedPSWD);
attributes.add(LDAPModification.REPLACE, attrUserPassword);

(2)某些目录不允许默认使用“预编码”密码。这是因为密码策略无法应用于未知密码(即,我如何知道此密码至少为八个字符,包含特殊字符并且不包含词典单词?)。在这种情况下,我管理的Oracle Unified Directory服务器返回错误53,并显示“密码属性userPassword不允许使用预编码的密码。”的文字,但是其他目录服务器可能会返回不同的代码(53通用代码,仅表示服务器配置中的某些内容导致操作无法完成)。排序方式取决于LDAP服务器-我的密码策略中具有allow-pre-encoded-passwords布尔值。我通常将其设置为“ true”,批量导入用户,然后将设置返回为“ false”,以防止应用程序开发人员绕过我们的密码策略。