Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MD5 PHP to Delphi 
:(
    Опции темы
salik
Дата 15.3.2014, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 28.1.2011

Репутация: нет
Всего: 1



Подскажите как код PHP переписать в Delphi.
Вот упрощенный вариант кода
Код

$hash = md5('123' . '123', TRUE);
echo htmlentities($hash, ENT_QUOTES); //  B�ôK�R5$[$�9�z�
echo htmlentities(md5($hash . '123', TRUE), ENT_QUOTES); // Áì²�Á6±�OïöÙ¥ 


С первым хешем проблем не возникает. Проверяю так
Код

function md5(SourceString: string): string;
var
  md5: TIdHashMessageDigest5;
  bt : Byte;
  ba : TBytes;
begin
   md5 := TIdHashMessageDigest5.Create;
  try
    ba := md5.HashString(SourceString, TEncoding.UTF8);
    Result := '';
    for bt in ba do Result := Result + Chr(ord(bt));
  finally
    FreeAndNil(md5);
  end;
end;

procedure TForm1.Btn1Click(Sender: TObject);
begin
  ShowMessage(md5('123123'));//B—ôK•R5$[$—9z“
end;

Не понятно как пых обрабатывает сложение $hash . '123' перед выполнением md5, а потом толи он мдпячит строку, толи массив байт.



Это сообщение отредактировал(а) salik - 15.3.2014, 16:25
PM MAIL   Вверх
Poseidon
Дата 16.3.2014, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133



Цитата(salik @  15.3.2014,  11:35 Найти цитируемый пост)
Не понятно как пых обрабатывает сложение $hash . '123' перед выполнением md5, а потом толи он мдпячит строку, толи массив байт.
Уверен, что этот вопрос стоит задавать в Delphi-разделе?



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
DYUMON
Дата 16.3.2014, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 17.6.2006
Где: Новосибирск

Репутация: нет
Всего: 3



кодировки смотри. в php и delphi разные кодировки  поэтому и не сходятся хеши


--------------------
Всех программистов надо посадить на целероны, что бы впредь головой думали что пишут.
user posted image
PM MAIL ICQ Skype   Вверх
salik
Дата 16.3.2014, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 28.1.2011

Репутация: нет
Всего: 1



Цитата(DYUMON @ 16.3.2014,  14:23)
кодировки смотри. в php и delphi разные кодировки  поэтому и не сходятся хеши

Были бы разные кодировки, то первый хэш был кривой. 
PM MAIL   Вверх
DYUMON
Дата 18.3.2014, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 17.6.2006
Где: Новосибирск

Репутация: нет
Всего: 3



циферкам пофиг кодировки


--------------------
Всех программистов надо посадить на целероны, что бы впредь головой думали что пишут.
user posted image
PM MAIL ICQ Skype   Вверх
salik
Дата 18.3.2014, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 28.1.2011

Репутация: нет
Всего: 1



Цитата(DYUMON @ 18.3.2014,  14:56)
циферкам пофиг кодировки

Скрипт PHP сохранен в кодировке UTF8 без бом.  Делфи XE3 + жестко указываю в функции UTF8. Я не стал заморачиваться и эту работу оставил скрипту, а результаты забираю пост запросом. Однако вопрос открыт.
PM MAIL   Вверх
DYUMON
Дата 19.3.2014, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 17.6.2006
Где: Новосибирск

Репутация: нет
Всего: 3



Делал так 
Код

function GetMD5_UTF8(val: String): string;
var
  md5: TIdHashMessageDigest5;
  DestEncoding: TEncoding;
begin
  md5 := TIdHashMessageDigest5.Create;
  DestEncoding := TEncoding.GetEncoding(CP_UTF8);
  try
    result := LowerCase(md5.HashStringAsHex(val, TEncoding.UTF8));
  finally
    FreeAndNil(md5);
    FreeAndNil(DestEncoding);
  end;
end;

цифры и  латиницу нормально обрабатывает а вот кириллицу нет

хотя нет нормально обрабатывает. только пробовал не на php на MySql запросом  
Код

select md5('привет')

выдало
608333adc72f545078ede3aad71bfe74

Это сообщение отредактировал(а) DYUMON - 19.3.2014, 21:53


--------------------
Всех программистов надо посадить на целероны, что бы впредь головой думали что пишут.
user posted image
PM MAIL ICQ Skype   Вверх
salik
Дата 20.3.2014, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 28.1.2011

Репутация: нет
Всего: 1



Цитата(DYUMON @  19.3.2014,  22:38 Найти цитируемый пост)
Делал так

Молодец что попробовал, только это не совсем то что нужно получить на выходе.
Вот ссылка на описани функции PHP http://www.php.net/manual/ru/function.md5.php. Обрати внимание на параметр True. Ты же предлагаешь получить результат вида 608333adc72f545078ede3aad71bfe74.
После выполнения
Код

md5('строка1', TRUE);

Мы должны получить бинарную строку.
Дальше мы должны выполнить следующее
Код

md5($бинарнаястрока1. 'частьстроки1', TRUE);

Получаем бинарную строку второго уровня и т.д.
Все это продемонстрировано в первом посте.

Это сообщение отредактировал(а) salik - 22.3.2014, 15:46
PM MAIL   Вверх
DYUMON
Дата 20.3.2014, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 321
Регистрация: 17.6.2006
Где: Новосибирск

Репутация: нет
Всего: 3



ты просто добавляешь соль и все .
Код

 GetMD5_UTF8(GetMD5_UTF8('123')+'123');


. в php  это обьединение


--------------------
Всех программистов надо посадить на целероны, что бы впредь головой думали что пишут.
user posted image
PM MAIL ICQ Skype   Вверх
salik
Дата 20.3.2014, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 28.1.2011

Репутация: нет
Всего: 1



Пробовал складывать 
Код

echo htmlentities(md5('B—ôK•R5$[$—9z“'.'123', true), ENT_QUOTES);

получаю '%��  (hÕÅH" ', как и в делфи, а надо плучить 'Áì²�Á6±�OïöÙ¥'
Возможно я не правильно складываю массивы.
Вот представьте есть два массива a,b : Tbytes.
Надо их сложить, получим третий массив размер которого a + b. Значения в который записываются последовательно: сначала из массива a, потом b. Если я что не так пишу, то поправьте.

Это сообщение отредактировал(а) salik - 20.3.2014, 09:50
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0813 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.