Encoding Active Directory中unicodePwd的正确编码

Encoding Active Directory中unicodePwd的正确编码,encoding,active-directory,Encoding,Active Directory,简而言之,Active Directory中的unicodePwd属性的正确字符编码是什么?UCS-2?UTF-16?有什么理由选择UTF-16而不是UCS-2吗 现在,解释一下: 我在使用PHP的ldap_mod_replace()设置Active Directory中的unicodewd属性时遇到了问题,直到我(某种程度上)找到了它的正确格式,该格式用双引号括起来,并用UCS-2/UTF-16 Little-Endian编码(在将其放入LDIF文件时也是base64编码的) 虽然根本的问题已

简而言之,Active Directory中的unicodePwd属性的正确字符编码是什么?UCS-2?UTF-16?有什么理由选择UTF-16而不是UCS-2吗

现在,解释一下:

我在使用PHP的ldap_mod_replace()设置Active Directory中的unicodewd属性时遇到了问题,直到我(某种程度上)找到了它的正确格式,该格式用双引号括起来,并用UCS-2/UTF-16 Little-Endian编码(在将其放入LDIF文件时也是base64编码的)

虽然根本的问题已经解决,但我无法理解这样一个事实,即我一直在互联网上看到这两种编码都被认为是正确的


我在这里很迂腐,但有人能指出正确的字符编码吗;dr使用UTF-16LE而不是UCS-2LE

回答我自己的问题:我所要做的就是尝试在UTF-16中设置一个包含4字节字符的密码,以查看在尝试登录时密码中是否正确识别和接受该字符

为了这样做,我把一个普通的密码放在一个相当奇怪的(日文)日文字符中,试图设置密码并查看反应。 事实证明,它确实接受了ldap\u mod\u replace()调用,并使用了笨拙的密码。不仅如此,当我试图用我刚用日语字符设置的密码登录时,它也被接受了。


总之,(如果我没有弄错的话)这表明Active Directory的UnicodePd属性不仅接受UTF-16字符,否则不会出现在UCS-2中,而且当密码包含长度为4字节的字符时,它也会正常工作。

正确的字符编码是UTF-16LE。此外,密码必须用双引号括起来。我不知道UCS-2编码是在哪里提到的,我从未亲眼见过

例子 用户密码:测试
引用密码:“测试”
UTF-16LE表示:

0x22 "
0x00
0x74 t
0x00
0x65 e
0x00
0x73 s
0x00
0x74 t
0x00
0x22 "
0x00
详情请参阅