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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MD5 Delphi and PHP, не совподение результата хеширование ... 
V
    Опции темы
Skinner
  Дата 28.2.2010, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

 Delphi -  f3b11c629052600e8fcd8a79687cd37c (dcpcrypt_2)
 PHP -     25d55ad283aa400af464c76d713c07ad (md5)

с начало думал проблема в кодировке но после того как оба проекта стали UTF-8 проблема не решилась 
еси кто знает как это вылечить то заранее благодарю!!
PM MAIL   Вверх
Alexeis
Дата 28.2.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Skinner, может ошибка в использовании. В любом случае без кода никто не поможет. Телепаты в отпуске все.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Matematik
Дата 28.2.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Цитата(Skinner @  28.2.2010,  14:34 Найти цитируемый пост)
еси кто знает как это вылечить

Использовать работающий код.
Вот архивчик, там 2 реализции - через WIN Api  и готовый алгоритм.
Оба дают 
Код

MD5('12345678') = 25d55ad283aa400af464c76d713c07ad


Но возможно не правильно используешь dcpcrypt.
Какой версии Delphi?

Это сообщение отредактировал(а) Matematik - 28.2.2010, 20:22

Присоединённый файл ( Кол-во скачиваний: 66 )
Присоединённый файл  md5.7z 48,62 Kb
PM MAIL WWW ICQ   Вверх
Skinner
Дата 1.3.2010, 03:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



dcpcrypt последний релиз с оф сайта под 2010 студию 

Код

function TForm1.DigestToStr(Digest: array of byte): string;
var
  i: Integer;
begin
  Result := '';
  for i := 0 to Length(Digest) - 1 do
    Result := Result + LowerCase(IntToHex(Digest[i], 2));
end;

function TForm1.GetStringHash(Source: string): string;
var
  Hash: TDCP_md5;
  Digest: array of Byte;
begin
  Hash := TDCP_md5.Create(Self); // создаём объект
  Hash.Init;                      // инициализируем
  Hash.UpdateStr(Source);
  SetLength(Digest,Hash.HashSize div 8);
  Hash.Final(Digest[0]);             // сохраняем её в массив
  Hash.Free;                      // уничтожаем объект
  Result := DigestToStr(Digest);  // получаем хэш-сумму строкой
end;


функции позаимствовал с одной из статей этого форума с какой точно не помню единственное доработал их исходя из демок производителя заменил массив Digest со статического на динамический!

вот статья откуда брал изначальные функции

Это сообщение отредактировал(а) Skinner - 1.3.2010, 03:49
PM MAIL   Вверх
Alexeis
Дата 1.3.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Skinner @  1.3.2010,  02:43 Найти цитируемый пост)
из демок производителя заменил массив Digest со статического на динамический!

  И не посмотрел на ожидаемый тип.

Код

procedure Final(var Digest); override;


var без типа ожидает, что ему дадут переменную достаточно большую чтобы туда влезло все что нужно, а ты вместо переменной передал указатель (динамический массив это указатель). Более того, даже не зарезервировал место в массиве чтобы было куда данные писать.

Рекомендую в функции GetStringHash вернуть переменную 
Код

 Digest: array of Byte;

в первоначальный вид. MD5 все равно имеет фиксированный размер, так что нет смысла городить огород с динамическим массивом. Красивее не получиться.

Код

function TForm1.DigestToStr(Digest: array of byte): string;

Это параметр открытый массив, так что туда можно передавать любой массив, хоть динамический хоть статический.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Skinner
Дата 1.3.2010, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да не с рачка так болячка ... это наверное какой то закон подлости из архива с примерами ни один пример не повел себя адекватно нечего схожего с этим

Код

MD5('12345678') = 25d55ad283aa400af464c76d713c07ad


нет даже приблизительно 

у меня получается следующий результат при подключении юнитов из выше представленного архива 

Код

MD5('12345678') = 0f037584c99e7fd4f4f8c59550f8f507
 

это просто полтергейст какой то а не компьютер 

вот так использовал юниты из архива 

Код

interface

uses
  Umd5, Windows, Messages, SysUtils,

...
...

...

procedure TForm1.Button4Click(Sender: TObject);
begin
 Memo1.Lines.Add(md5(Edit1.Text));
end;

...
...
...




и в чем тут может быть проблема ................  smile 
PM MAIL   Вверх
Matematik
Дата 1.3.2010, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Skinner
В  Delphi 2009/2010 тип string стал равен UnicodeString, т.е. это теперь юникод.
Почитай:
Delphi в мире Юникода, часть I: что такое Юникод, зачем он Вам нужен и как с ним работать в Delphi?
Delphi в мире Юникода, часть II: новые возможности RTL и классы для поддержки Юникода 
Delphi в мире Юникода, часть III: Юникодификация Вашего кода 

Новой версии у меня нет, возможно проблема решается простым изменением типа строки

Код

function TForm1.GetStringHash(Source: AnsiString): AnsiString;


Это сообщение отредактировал(а) Matematik - 1.3.2010, 21:37
PM MAIL WWW ICQ   Вверх
Skinner
Дата 3.3.2010, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Огромнае спасибо все получилось .. все таки это кодировка только не стой стороны что я думал .. спасибо  smile 
PM MAIL   Вверх
russjura
Дата 14.4.2010, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Друзья, спасибо, что просветили про unicode! Очень важное замечание! 

Теперь благодаря этому сравнил еще парочку примеров бесплатных, PHP функции md5 и sha1  и решения на dcpcrypt2 ТОРЖЕСТВЕННО СОВПАДАЮТ! 

Огромное спасиибо!
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.0779 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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