Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2014, 04:02   #21
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

вот у меня как-то совпадает...

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
все склонен дyмать что там своя магия. мд5 используется явно от ssl.
Да хоть md5 от Васи Пупкина... суть алгоритма не меняет... MD5 и так признан "слабым", а всякие левые шаманства устойчивости не добавляют...
Изображения
Тип файла: png Безымянный.png (25.6 Кб, 146 просмотров)
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 24.12.2014 в 04:12.
Slym вне форума Ответить с цитированием
Старый 24.12.2014, 08:36   #22
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
вот у меня как-то совпадает...
Ну вот смотрите скриншот. Имей и в Вашей программе, и в оригинальной один и тот же. Зелёной линией я отметил то, что совпало, красной то, что не совпало. Или у Вас как-то иначе?
Изображения
Тип файла: jpg Безымянный.jpg (33.4 Кб, 123 просмотров)

Последний раз редактировалось WinCoder; 24.12.2014 в 08:46.
WinCoder вне форума Ответить с цитированием
Старый 24.12.2014, 08:43   #23
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

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



ПС!!!
там разные IMEI!!!!!!!!!!
там разные IMEI!!!!!!!!!!
там разные IMEI!!!!!!!!!!
там разные IMEI!!!!!!!!!!
там разные IMEI!!!!!!!!!!
Изображения
Тип файла: png Безымянный.png (34.8 Кб, 148 просмотров)
Тип файла: jpg Безымянный.jpg (36.4 Кб, 123 просмотров)
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 24.12.2014 в 09:08.
Slym вне форума Ответить с цитированием
Старый 24.12.2014, 09:50   #24
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Всё, увидел. Ошибки нет. Разные IMEY. Расшифровка всех веток верна. Можно продолжать перевод.

Заметил, что у меня не верно считается encrupt_4. Видимо из за того, что md5 написан под Ansi, а я работаю из под XE7 юникод.

Последний раз редактировалось WinCoder; 24.12.2014 в 10:47.
WinCoder вне форума Ответить с цитированием
Старый 24.12.2014, 20:02   #25
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
unit encrypt_3;

//
//  Калькулятор nlock-кодов для модемов Huawei с новым алгоритмом v201
//  Автор - forth32
//  2014 год
//  Портировал Delphi - Slym
//  Ветка для вычисления кодов с индексом 2
//

interface

function Encrypt(const imei:string;version:integer):string;

implementation
uses SysUtils, HashMD5;

function XProc(const x:byte):byte;
var cx:Int64;
  r2,r3:integer;
begin
  cx:=Int64($cccccccd)*Int64(x);
  r2:=(cx shr 32);
  r2:=r2 shr 3;
  r3:=r2 shl 3;
  r2:=r2 shl 1;
  result:=x-(r2+r3);
end;

function Encrypt(const imei:string;version:integer):string;
var
  MD5:T4LongWordRecord;
  buf:PByteArray;
  i,r1:integer;
begin
  result:=StringOfChar('0',8);
  MD5:=HashValueStr(imei);
  buf:=PByteArray(@MD5);
  if version=201 then
    buf:=PByteArray(integer(buf)+5);

  r1:=XProc(buf[0]);
  if r1<>0 then
    buf[0]:=r1
  else
  begin
    for i:=8 to 13 do
    begin
      r1:=XProc(buf[i]);
      if r1<>0 then break;
    end;
    if (r1=0) then
      buf[0]:=5
    else
      buf[0]:=r1;
  end;

  for i:=0 to 7 do
  begin
    r1:=(buf[i]-$30) and $ff;
    if (r1>9) then
    begin
      r1:=XProc(buf[i]);
      result[i+1]:=Chr(r1+$30);
    end else
      result[i+1]:=Chr(buf[i]);
  end;
end;

end.
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 24.12.2014, 21:16   #26
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Переведено верно. Остались encrypt_6, и encrypt_7
Цитата:
IMEI 352239005314800 calc201 ветка 0 encrypt_1 29081473
IMEI 355239005314800 calc2 ветка 0 encrypt_1 48821554

IMEI 354239005314800 calc201 ветка 1 encrypt_2 95001296
IMEI 353239005314800 calc2 ветка 1 encrypt_2 92430611

IMEI 352239005314816 calc201 ветка 2 encrypt_3 92159468
IMEI 352239005314804 calc2 ветка 2 encrypt_3 42808710

IMEI 357239005314800 calc201 ветка 3 encrypt_4 41028861
IMEI 356239005314800 calc2 ветка 3 encrypt_4 57050088

IMEI 351239005314800 calc201 ветка 4 encrypt_6 - N/A -
IMEI 354239005314800 calc2 ветка 4 encrypt_5_v2 66469054

IMEI 356239005314800 calc201 ветка 5 encrypt_6 - N/A -
IMEI 352239005314800 calc2 ветка 5 encrypt_6 - N/A -

IMEI 352239005314806 calc201 ветка 6 encrypt_7 - N/A -
IMEI 350239005314800 calc2 ветка 6 encrypt_7 - N/A -

Последний раз редактировалось WinCoder; 24.12.2014 в 21:18.
WinCoder вне форума Ответить с цитированием
Старый 24.12.2014, 21:59   #27
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
unit encrypt_6;

//
//  Калькулятор nlock-кодов для модемов Huawei с новым алгоритмом v201
//  Автор - forth32
//  2014 год
//  Портировал Delphi - Slym
//  Ветка для вычисления кодов с индексом 5 и 6 - они одинаковые и отличаются только номерами выбираемых числе из хеша
//

interface

function Encrypt(const imei:string;version:integer):string;

implementation
uses SysUtils, IcsSHA1;

//Используется алгоритм SHA1, но не дайджест, а промежуточный результат Intermediate_Hash

function Encrypt(const imei:string;version:integer):string;
var
  context: SHA1Context;
  digest : SHA1Digest;
  c1,c2:cardinal;
begin
  SHA1Reset ( context);
  SHA1Input ( context, PChar( @imei[1] ), length(imei));
  SHA1Result( context, digest );

  case version of
    2: c1:=context.Intermediate_Hash[0];
    5: c1:=context.Intermediate_Hash[1];
    6: c1:=context.Intermediate_Hash[2];
  end;

  case version of
    2: c2:=context.Intermediate_Hash[1];
    5: c2:=context.Intermediate_Hash[4];
    6: c2:=context.Intermediate_Hash[3];
  end;

  result:=IntToStr(c1)+IntToStr(c2);
  SetLength(result,8);
end;

end.
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 25.12.2014 в 05:33.
Slym вне форума Ответить с цитированием
Старый 24.12.2014, 22:26   #28
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Slym какие значения выдаёт по IMEI 352239005314800? У меня что-то в минус ушло

Последний раз редактировалось WinCoder; 24.12.2014 в 22:41.
WinCoder вне форума Ответить с цитированием
Старый 25.12.2014, 05:34   #29
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Цитата:
Сообщение от WinCoder Посмотреть сообщение
Slym какие значения выдаёт по IMEI 352239005314800? У меня что-то в минус ушло
как обычно приведение типов,
нужен беззнаковый cardinal
исправил...
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 25.12.2014, 15:40   #30
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

В юните encrypt_2 заметил, что массив из алго вычисления crc32. Можно упростить?
WinCoder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Algo 2 -=$mile_Cr@Ft=- Паскаль, Turbo Pascal, PascalABC.NET 0 28.11.2008 15:59
calculator II leonw Общие вопросы Delphi 3 08.08.2008 11:09