【问题标题】:Correct encoding for unicodePwd in Active DirectoryActive Directory 中 unicodePwd 的正确编码
【发布时间】:2015-06-02 02:57:33
【问题描述】:

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

现在,解释一下:

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

虽然解决了根本问题,但我无法理解我一直看到互联网上提到的两种编码都是正确的事实。

我在这里很迂腐,但有人能指出正确的字符编码吗?

【问题讨论】:

    标签: encoding active-directory


    【解决方案1】:

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

    示例

    用户密码:test
    引用密码:“test”
    UTF-16LE 表示:

    0x22 "
    0x00
    0x74 t
    0x00
    0x65 e
    0x00
    0x73 s
    0x00
    0x74 t
    0x00
    0x22 "
    0x00
    

    更多详情请访问MSDN

    【讨论】:

      【解决方案2】:

      tl;dr 使用 UTF-16LE 而不是 UCS-2LE

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

      为了做到这一点,我在普通密码中间放了一个(对我而言)相当陌生的日文字符,尝试设置密码并查看反应。

      事实证明,它确实接受了带有笨拙密码的 ldap_mod_replace() 调用。不仅如此,当我尝试使用刚刚设置的密码登录时,它也接受了,中间是日文字符。

      总之,(如果我没记错的话)这表明 Active Directory 的 unicodePwd 属性不仅接受 UTF-16 字符,否则 UCS-2 中不存在,它的行为也应如此当密码包含长度为 4 个字节的字符时。

      【讨论】:

        猜你喜欢
        • 2017-02-14
        • 2011-08-14
        • 1970-01-01
        • 1970-01-01
        • 2020-04-12
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多