Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
n1056
0 / 0 / 1
Регистрация: 17.04.2016
Сообщений: 59
1

Не правильно выполняется расчет MD5

05.11.2016, 16:00. Просмотров 281. Ответов 3
Метки нет (Все метки)

Коллеги, добрый день.
Подскажите в чем моя ошибка.
Запускаю генерацию дайджестов по алгоритму MD5 для сообщения длиной в 1 символ с перебором символа по коду от 0 до 255. И проверяю на наличие совпадений по ранее сгенерированным дайджестам.
При проверке получаю 112 совпадений. Совпадения получаю на шагах N: 129-152,154-160,162-164,166,169,171,176,179-181,185-187,189-256. Совпадений быть не должно.
Для контроля проверил на двух реализациях MD5 (компонент md5 и System.Hash). Количество совподений одникаковое и на тех же шагах. Что я упускаю?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
var
  Form1: TForm1;
  A,B,C,D,E,F,I,N,P,Q: Integer;
  Pass: String[1];     //пароль введенный 1й раз
  //EPass2: String;     //пароль введенный 2й раз
  KeyMD5, KeyMD5c : String[32];
  KeyMD5m, St, St1: String[32];
  FBD, FSO,FSW: TFileStream;
  FRES: TextFile;
  KeyHC, B0: Byte;
  KeyHCS : String[8];
  Ch: Char;
  MasHex : String[16];
  CRC32, I32: DWORD;
  I64: Int64;
  B32: array [0.. 3] of Byte absolute I32;
  HashSHA1:THashSHA1;
  HaMD5:THashMD5;
 
procedure TForm1.Button1Click(Sender: TObject);
 
begin
  HaMD5:=THashMD5.Create;
  A:=0;B:=0;C:=0;
  N:=0; P:=0; Q:=0;
  CRC32 := 0;
  St := '';
  FBD := TFileStream.Create('c:\temp\bd.txt', fmCreate or fmOpenReadWrite or fmShareExclusive);
  AssignFile(FRES, 'c:\temp\res.txt');
  Rewrite(FRES);
  repeat  // A
    Pass := char(A); //+char(B); //+char(C);
    Label2.Caption := Pass;
    KeyMD5 := '';
    KeyMD5c := '';
    KeyMD5m := '';
    KeyHC :=0;
 
    FBD.Seek(0, soFromEnd);
 
    HaMD5.Reset();
    HaMD5.Update(Pass);
    KeyMD5 := HaMD5.HashAsString;
    KeyMD5m := MD5DigestToStr(MD5String(Pass));
 
    Label4.Caption := KeyMD5;
    Label16.Caption := Pass;
    KeyMD5c := KeyHCS;
    Label10.Caption := KeyMD5c;
 
    Label14.Caption := KeyMD5m;
    Application.ProcessMessages;
   for I := 1 to 32 do
    Begin
      FBD.Write(KeyMD5[I], 1);
    End;
    N:=N+1;
    repeat
      St := '';
      FBD.Seek(P*32, soFromBeginning);
      for I := 1 to 32 do
      begin
        FBD.Read(Ch, 1);
        St := St+ Ch;
      end;
      P:=P+1;
 
      if KeyMD5=St Then Q:=Q+1;
      if Q=2 then
 
        Writeln(FRES, IntToStr(N)+' '+KeyMD5);
 
      if Q=2 Then break;
    until N=P;
    P:=0; Q:=0;
    A:=A+1;
    Label6.Caption := IntToStr(N);
    Application.ProcessMessages;
 
  until A=256;
 
  Label8.Caption := 'End.';
  CloseFile(FRES);
  FBD.Free;
end;
Добавлено через 1 час 35 минут
Не знаю, что думать. Как вариант.
В описании System.Hash.THashMD5 присутствует процедура FinalizeHash. И по идеи ей необходимо завершать вычисление хэш.
Пробую ее использовать HaMD5.FinalizeHash; но Delphi сообщает, что такой инструкции нет в THashMD5.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2016, 16:00
Ответы с готовыми решениями:

Код выполняется не правильно
Здарова. Есть проект который определяет цвет в указанном пикселе, передаёт значение в "лэйбел"....

Цикл For выполняется не правильно
Доброе время суток! В общем, столкнулся с такой вот проблемой: Пишу программу для расчета...

Если MD5 программы не равен MD5, указанному на сервере, то программа закрывается
И так, собственно, изложил свою мысль в заголовке. Если MD5 программы не равен MD5, указанному на...

Сравнение md5-сумм с md5-суммами файлов!
Всем доброго времени суток! Помогите реализовать небольшое приложение - вообщем имеется папка...

Скачивание картинок, расчет md5
Доброго времени суток. Перейду сразу к делу. Есть на сервере папка с текстурами, есть клиент. Надо...

3
qwertehok
2740 / 2421 / 642
Регистрация: 29.08.2013
Сообщений: 16,309
05.11.2016, 18:07 2
ваш код, несколько необычен

не понял про "дайджесты", но работал с md5
попробуйте сделать руками
Delphi
1
showmessage(HaMD5.GetHashString(ваши_буквы));
без
HaMD5:=THashMD5.Create;
HaMD5.Reset();
HaMD5.Update(Pass);
0
n1056
0 / 0 / 1
Регистрация: 17.04.2016
Сообщений: 59
05.11.2016, 23:34  [ТС] 3
Как и предполагал, без чудес.
Проблема в переменной Pass. Если использовать на прямую char(A) при обращении к функции все Ок. Или если Pass:string; тоже все Ок.
Спасибо всем за участие.
0
northener
пофигист широкого профиля
3458 / 2352 / 639
Регистрация: 15.07.2013
Сообщений: 14,028
06.11.2016, 02:40 4
Цитата Сообщение от n1056 Посмотреть сообщение
Проблема в переменной Pass.
Я вот тоже обратил внимание на явно нетрадиционный тип сей переменной.
Кто и с какого бодуна его придумал?
0
06.11.2016, 02:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.11.2016, 02:40

Как выполняется расчет коэффициентов авторегрессии
Добрый день, мне необходимо сделать восстановление временных рядов в программе wolfram mathematica....

Не правильно выполняется запрос
СУБД firebrid добавляю запись в базу S:='insert into dela '+' (delo)'+ 'values (:delo)'; ...

Не правильно выполняется запрос
построил запрос конструктором: ДетальныйЗапрос = Новый Запрос; ДетальныйЗапрос.Текст =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru