Добавление 00 к каждому символу в строке пароля

#php #encoding #active-directory #ldap

#php #кодирование #active-directory #ldap

Вопрос:

Зачем это делать.

 for ($i = 0; $i < $len; $i  ) {
    $unicodepassword .= "{$passwd{$i}}00";
}
  

Контекст: это пароль, установленный при создании или изменении пользователя в Active directory. Мы переписываем какой-то древний код, и без этого ничего не работает. Внесение изменений в наш LDAP не требует такого рода «кодирования».

Также результат этого упражнения называется «unicodepassword», мне кажется странным.

Комментарии:

1. Я действительно предполагаю здесь, но может ли это быть преобразование ascii в UTF-16 или какую-либо другую кодировку, которая обычно использует несколько байтов?

2. @Fabian хорошая догадка — это может быть: символы станут нечитаемыми, но это не имеет значения, потому что это все равно пароль. Таким образом, строка будет дополнена до допустимой многобайтовой и сохранена в среде UTF-16

3. Это отличный материал об ужасах кодирования и The DailyWTF .

Ответ №1:

Также результат этого упражнения называется «unicodepassword», мне кажется странным.

На самом деле это простое преобразование из ASCII в UTF-16 (строчный порядковый номер). Для символов > # 127 это преобразуется в кодовую точку unicode, значение которой совпадает с ord($passwd{$i}) (так что это будет зависеть от кодировки исходного пароля).

Комментарии:

1. Это может объяснить, почему это сработало при нашем переходе с ISO на UTF8. Символы, отличные от ASCII, никогда не разрешались.