Декодирование двух разных строк base64 возвращает два раза одну и ту же строку

Кодирование / декодирование base64 использует детерминированные алгоритмы. Из-за этого заданная входная строка всегда будет кодироваться в известную выходную строку и наоборот.

Используя браузер для доступа к URL-адресу, защищенному с помощью базовой аутентификации, браузер кодирует пару имя пользователя: пароль в строку base64 и помещает эту строку в заголовок запроса HTTP-авторизации. Используя Firebug, легко прочитать эту закодированную строку с сетевого монитора - назовем ее строкой A.

На малине (запущенной Debian Wheezy) я установил ddclient для обновления записей DNS для моего домена с помощью dyndns. Конфигурация ddclient предоставляется с той же парой имя пользователя: пароль, которая используется для доступа к URL с помощью браузера. Клиент даже пытается получить доступ к тому же URL-адресу (используя обычную аутентификацию), но доступ не удается из-за плохой аутентификации. В отладочном выводе ddclient я могу прочитать строку в кодировке base64 - назовем ее String B.

По любой причине Строка A и Строка B различны! Но они созданы из одной пары имя пользователя: пароль. Если я декодирую строки в оболочке Debian

echo myBase64EncodedStringGoesHere | base64 --decode

или в консоли браузера с помощью JavaScript

atob('myBase64EncodedStringGoesHere')

В результате всегда получается одно и то же имя пользователя: пара паролей, независимо от того, декодирую ли я строку A или строку B.

Мое единственное объяснение состоит в том, что в имени пользователя могут быть некоторые невидимые управляющие символы: конфигурация пароля ddclient, влияющая на результат кодирования base64. Таким образом, я проверил конфигурацию ddclient, используя vi редактор с командой

:set list

Смотрится все хорошо. Я в тупике. У кого-нибудь есть клей, что происходит?

Обновление 1

из-за комментария @C4stor я проверил, что происходит, когда я беру свою пару имя пользователя: пароль и кодирую ее командой shell

echo username:password | base64

В результате я получаю строку A с отступом символов == в конце. Кроме того, из отступа ОС Debian создала ту же строку, что и веб-браузер (используемый в Windows).

Обновление 2

По запросу @ umläute, здесь есть две демонстрационные строки: Stirng A: bXlkb21haW4uY29tOmRueURucz String B: bXlkb21haW4uY29tOmR5bkRucz декодировать их в консоли браузера с помощью

atob('STRING')

дает всегда одну и ту же декодированную строку.

1 ответ

Решение

В конфигурационном файле ddclient должно быть несколько невидимых управляющих символов, возможно, из-за копирования и вставки...

С помощью vi Я удалил содержимое из файла и написал каждую строку вручную. Теперь ddclient создает ожидаемую строку в кодировке base64.

Я до сих пор удивляюсь, почему я не смог увидеть персонажей с ви :set list Команда, но, по крайней мере, теперь проблема решена.

Другие вопросы по тегам