Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.08.2011, 10:42
Olgir Olgir вне форума
Прохожий
 
Регистрация: 25.08.2011
Сообщения: 5
Репутация: 10
По умолчанию Base64

Доброго времени суток, господа (и дамы) программисты! Впервые решил обратиться за помощью на форум (обычно хватает недолгого поиска в гугле для решения проблемы), так что, если я что-то делаю не так, некорректно ставлю вопрос или еще чего, тапками не кидайтесь .

Такс... пока писал все это многабукаф уже сам допер, насколько просто решается проблема. Но все-таки, меня интересует, что является ее причиной. Может быть кто-то знает?

Итак, сабж: пишу я программку-почтовик, с использованием сокетов. Все идет отлично, разобрался с сокетами, разобрался с протоколом ESMTP, программа посылает запросы, сервер отвечает как положено, но есть одна проблема, перед которой я оказался бессилен. Авторизация у нас на почтовике проходит методом plain, т.е. клиент должен отправить серверу строку с логином и паролем, закодированными в Base64. Отлично, нашел в интернете кучу функций кодирования и декодирования, да и в делфи оказалось несколько встроенных вариаций. Но вот беда, строка, закодированная в моей программе ну просто никак не хочет совпадать со строкой, закодированной на сервере!
Сперва меня посетила мысль, что моя версия Delphi (2010) по умолчанию использует юникод для переменных типа string и именно из-за разницы в кодировках получаются разные строчки в Base64. Мысль сия терзала меня долгое время, но потом я получше рассмотрел код и отказался от нее в силу того, что еще на этапе компиляции поменял все string и char на ansistring и ansichar по причине несовпадения типов (двухбайтовый Char ну никак не лезет в Byte ). Возникает вопрос, в чем же тогда дело? Сегодня поюзал онлайн-кодеры на разных сайтах и все они кодируют именно так, как кодирует моя программа.
Итак, по версии моей программы, строка " marketing" (пробел впереди) выглядит так: IG1hcmtldGluZw==
Почтовый сервер же считает, что должно быть так: AG1hcmtldGluZw==

Пока писал тему, заметил, что коды то по сути и не отличаются, за исключением первой буквы *facepalm*. Проблему уже решил, тупой заменой символов I и y (с ним тоже непонятки были) на A и w соответственно. Но может кто-то знает, почему наш почтовик кодирует пробел иначе, чем моя программа? Там FreeBSD, у меня WinXP. И вообще, какой из двух вариантов верный?

Последний раз редактировалось Olgir, 25.08.2011 в 11:28.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:02.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025