Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 SHA в XE8  [new]
svd
Member

Откуда:
Сообщений: 130
Vsem priven.

В проекте на XE8 требуется закодировать с HASH SHA256. Гугл выдает ссылку на эту страницу. Но такого юнита нет. подозреваю, что в более новых версиях все соотвествует документации. Но все же, есть ли где-то шифрование по указанному типу или нужно что то дополнительно скачивать?
4 июл 18, 14:28    [21542623]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
dartveider13
Member

Откуда: Омск
Сообщений: 600
В Инди есть модуль IdHash, насчет 256 не уверен, но дока описывает что он умеет SHA делать. Есть еще MD5 в IdHashMessageDigest. Я его в одном своем приложении применил
4 июл 18, 14:39    [21542708]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 5966
svd,

Погугли DCPCrypt либу.
4 июл 18, 14:39    [21542710]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 28941

не надо индюков юзать.
это хаос, а не библиотека.

Posted via ActualForum NNTP Server 1.5

4 июл 18, 14:45    [21542745]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
Василий 2
Member

Откуда:
Сообщений: 131
Если в доках на ХЕ8 нету данного алгоритма, то придется скачивать
4 июл 18, 14:47    [21542754]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2623
Мимопроходящий,

нормальная, в целом, либа. не без проблем, конечно.
4 июл 18, 14:51    [21542782]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
krapotkin
Member

Откуда: Екатеринбург
Сообщений: 613
system.hash пришел в Seattle
4 июл 18, 15:02    [21542852]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
svd
Member

Откуда:
Сообщений: 130
Спасибо за советы.

Любую не подходит. Нужно именно SHA256. На другом конце будет совершенно другой код работать.

Посмотрел IdHASH и не нашел там что либо о SHA256.

Скачал DCPCrypt. Вроде что то есть, но придется кучу модулей еще в проект пихать - эффект матрешки. Причем сторонних, что не есть хорошо.
4 июл 18, 15:39    [21543034]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
alekcvp
Member

Откуда:
Сообщений: 980
Я пользовался этой, с минимум оверхеда.

https://github.com/fundamentalslib/fundamentals5/blob/master/Source/Utils/flcHash.pas
4 июл 18, 15:41    [21543040]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3499
svd,

Можно без "библиотек", если под винду. Виндовыми обойтись.

На, вот:
+
function HashData( Source: Pointer; nSourceLen: DWORD; Dest: Pointer; nResultLen: DWORD; alg: ALG_ID ): Boolean;
var
  lpProvider: PChar;
  dwProvType: DWORD;

  hash_prov: HCRYPTPROV;
  hash_item: HCRYPTHASH;
  hash_len: DWORD;
begin
  Result := FALSE;

  if ( alg >= CALG_SHA_256 ) and ( alg <= CALG_SHA_512 ) then begin
    lpProvider := nil;
    dwProvType := PROV_RSA_AES;
  end else begin
    lpProvider := MS_DEF_PROV;
    dwProvType := PROV_RSA_FULL;
  end;

  if ( CryptAcquireContext( @hash_prov, nil, lpProvider, dwProvType, CRYPT_VERIFYCONTEXT or CRYPT_SILENT ) <> FALSE ) then
  begin
    if ( CryptCreateHash( hash_prov, alg, nil, 0, @hash_item ) ) then
    begin
      if ( CryptHashData( hash_item, Source, nSourceLen, 0 ) ) then
      begin
        hash_len := nResultLen;
        if ( CryptGetHashParam( hash_item, HP_HASHVAL, Dest, @nResultLen, 0 ) and ( hash_len = nResultLen ) ) then
          Result := TRUE;
      end;
      CryptDestroyHash( hash_item );
    end;
    CryptReleaseContext( hash_prov, 0 );
  end;
end;

Понадобится модуль Wcrypt2 (приложил).
Использование:
+
procedure TForm1.Button1Click(Sender: TObject);
type
  THASH_SHA256_DATA = packed array[ 0 .. 31 ] of Byte;
var
  hash: THASH_SHA256_DATA;
  S, SHex: AnsiString;
begin
  S := 'qwerty';
  if HashData( Pointer( S ), Length( S ), @hash, sizeof( hash ), CALG_SHA256 ) then begin
    SetLength( SHex, 2 * sizeof( hash ) );
    BinToHex( PAnsiChar( @hash ), PAnsiChar( SHex ), sizeof( hash ) );
    ShowMessage( SHex );
  end else
    ShowMessage( 'error' );
end;

Не тестировал, конечно, на XE8, но на старых дельфях и FPC под x86 и x64 работает.

К сообщению приложен файл (Wcrypt2.zip - 57Kb) cкачать
4 июл 18, 16:14    [21543223]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
Василий 2
Member

Откуда:
Сообщений: 131
Релизаций хэшей завались, на все случаи жизни. Можно хоть из сорсов свежих версий стрельнуть, хоть сторонние заюзать
4 июл 18, 17:43    [21543618]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
Цветонарий
Guest


К сообщению приложен файл (System.Hash.pas - 58Kb) cкачать
4 июл 18, 21:16    [21544183]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12012
svd
Посмотрел IdHASH и не нашел там что либо о SHA256.


TIdHashSHA256 и другие живут в IdHashSHA


function GetSHA1(const txt: string): string;
var
  SHA1: TIdHashSHA1;
begin
// получаем md5-хэш для строки
  Result := '';

  SHA1 := TIdHashSHA1.Create;
  try
    Result := SHA1.HashStringAsHex(txt);
  finally
    FreeAndNil(SHA1);
  end;// екн
end;
5 июл 18, 08:35    [21544721]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12012
krapotkin
system.hash пришел в Seattle


здесь есть тесты на скорость и Delphi самый быстрый
http://www.webdelphi.ru/2016/01/samyj-bystryj-sposob-poluchit-xesh-sha1-dlya-fajla-v-delphi-10/
5 июл 18, 08:43    [21544731]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 12012
http://www.queryadmin.com/1774/delphi-10-berlin-system-hash-md5-sha1-sha2-hash/
5 июл 18, 08:52    [21544749]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
svd
Member

Откуда:
Сообщений: 130
Спасибо всем большое!
Уже набралось какое то количество разных библиотек. Сейчас буду пробовать, пока не подойдет. Смущает то, что у веех разные вызовы, но думаю, что разверусь.
5 июл 18, 09:22    [21544821]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
alekcvp
Member

Откуда:
Сообщений: 980
X11
krapotkin
system.hash пришел в Seattle

здесь есть тесты на скорость и Delphi самый быстрый
http://www.webdelphi.ru/2016/01/samyj-bystryj-sposob-poluchit-xesh-sha1-dlya-fajla-v-delphi-10/

Тестировать скорость алгоритма хеширования, предоставляя ему данные прямым чтением с диска - клинический идиотизм, как по мне. Потому что там 100500 посторонних факторов могут влиять на скорость считывания с диска.
5 июл 18, 12:16    [21545503]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 5966
alekcvp,

Да там вроде размер буфера один и тот же при чтении для разных хешей, файл тоже один и тот же - так что общую закономерность отследить можно. Ну и если файл будет например 100Гб - ты его весь в память тянуть будешь?
5 июл 18, 13:24    [21545859]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
alekcvp
Member

Откуда:
Сообщений: 980
DarkMaster
alekcvp,

Да там вроде размер буфера один и тот же при чтении для разных хешей, файл тоже один и тот же - так что общую закономерность отследить можно. Ну и если файл будет например 100Гб - ты его весь в память тянуть будешь?

Одно чтение в кэш диска попало, во время другого кто-то ещё что-то читает - разница в разы. Тут виндовский дефраг проснулся, что-то оптимизировать решил, пока пользователь мышкой не дёргает - разница ещё в разы.
Чтобы протестировать именно скорость - делают небольшой буфер, с десяток мегабайт, и считают его хэш по кругу пару тысяч раз. Тогда относительно точные результаты будут.
5 июл 18, 14:00    [21546025]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 2623
alekcvp,

зачем причитать? тестов 5 провести и выбрать лучший/средний.
5 июл 18, 14:04    [21546042]     Ответить | Цитировать Сообщить модератору
 Re: SHA в XE8  [new]
Василий 2
Member

Откуда:
Сообщений: 131
Просто флуктуации алгоритмов на фоне времени чтения с харда будут незначительны.
5 июл 18, 15:05    [21546306]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить