Обсуждение статьи "Реализация криптографического алгоритма SHA-256 с нуля на MQL5"

 

Опубликована статья Реализация криптографического алгоритма SHA-256 с нуля на MQL5:

Создание интеграций с криптовалютными биржами без DLL-файлов долгое время было сложной задачей, но это решение обеспечивает полную основу для прямого подключения к рынку.

При реализации SHA-256 в торговую среду оптимизация эффективности приобретает решающее значение, поскольку каждая миллисекунда может повлиять на результаты торговли. Пользовательская реализация предлагает несколько способов оптимизации, которые были бы невозможны при использовании встроенных функций.

Торговые системы часто демонстрируют специфические паттерны в своих криптографических операциях. Например, сигнатуры ордеров обычно содержат аналогичные компоненты, такие как временные метки, символы и количества. Понимая эти паттерны, мы можем оптимизировать нашу реализацию SHA-256 специально для структур данных, связанных с трейдингом.

Рассмотрим, как работает размещение ордеров в типичном торговом сценарии. Для каждого ордера требуется несколько фрагментов информации: торговая пара, тип ордера, количество, цена и временная метка. В стандартных реализациях эти данные каждый раз обрабатывались бы как совершенно новые входные данные. Однако мы можем оптимизировать этот процесс, признавая, что многие компоненты остаются неизменными или следуют предсказуемым паттернам.


Автор: Abdulkudus Okatengwu Kadir

 

Если текст_ключа превышает 64 символа, то HMacSha256 вычисляется некорректно. Что следует исправить в этом случае?

 
Sergey Zhilinskiy #:

Если текст_ключа превышает 64 символа, то HMacSha256 вычисляется некорректно. Что следует исправить в этом случае?

Моя текущая реализация адаптируется к ключам длиной более 64 символов. Есть ли у вас конкретная пара ключ-сообщение, для которой она не работает?

 
Abdulkudus Okatengwu Kadir #:

Моя текущая реализация адаптируется к ключам длиной более 64 символов. Есть ли у вас конкретная пара ключ-сообщение, для которой она не работает?

string text = "Hello";

string key_text = "1234567890123456789012345678901234567890123456789012345678901234";

https://www.devglan.com/online-tools/hmac-sha256-online -> 7558a77ff19ed6cb4777355e4bbc4772759a8130e1bb0913ba62b88411fdbaf8

Тестовый скрипт -> 2025.02.27 22:28:43.792 Sha256TestFile (EURUSD,M5) 6d8ee9dc1d16261fd986fafb97d919584aa206ca76706fb3deccc63ab2b7f6b

если string key_text = "123456789012345678901234567890123456789012345678901234567890123" - OK
HMAC-SHA256 Hash Generator | Devglan
  • DevGlan
  • www.devglan.com
HMAC is a message authentication code (MAC) using a hash function. It combines with any cryptographic hash function, for example, md5, sha1, sha256. Hash function is wrapped to a class as one template parameter in HMAC and the wrapper class only has a static function involving...
 
Sergey Zhilinskiy #:

string text = "Привет";

string key_text = "1234567890123456789012345678901234567890123456789012345678901234";

https://www.devglan.com/online-tools/hmac-sha256-online -> 7558a77ff19ed6cb4777355e4bbc4772759a8130e1bb0913ba62b88411fdbaf8

Тестовый скрипт -> 2025.02.27 22:28:43.792 Sha256TestFile (EURUSD,M5) 6d8ee9dc1d16261fd986fafb97d919584aa206ca76706fb3deccc63ab2b7f6b

если string key_text = "123456789012345678901234567890123456789012345678901234567890123" - OK

Я только что попробовал это на своем терминале и получил то же самое, что и онлайн хэш-инструмент:

2025.02.28 12:37:16.468 hashin_example_code (EURUSD,M5) 7558A77FF19ED6CB4777355E4BBC4772759A8130E1BB0913BA62B88411FDBAF8

используя код ниже:
.
void Hash()
{
   // Текст для хэширования
   string text = "Hello";
   string key_text = "1234567890123456789012345678901234567890123456789012345678901234";
   HMacSha256 myhash(key_text, text);
   Print(myhash.hexval);
}
Возможно, вы захотите поделиться своим кодом.

 

Да, он работает правильно с оригинальным Sha256Algorithm.mqh. Я внес некоторые изменения, может быть, поэтому он не работает?

 string CSha256Class::GetHex( void )
  {
   string result  = "" ;
 /*
 result += UintToHex(h0);
 result += UintToHex(h1);
 result += UintToHex(h2);
 result += UintToHex(h3);
 result += UintToHex(h4);
 result += UintToHex(h5);
 result += UintToHex(h6);
 result += UintToHex(h7);
*/ 
   result += StringFormat ( "%.2x" ,h0);
   result += StringFormat ( "%.2x" ,h1);
   result += StringFormat ( "%.2x" ,h2);
   result += StringFormat ( "%.2x" ,h3);
   result += StringFormat ( "%.2x" ,h4);
   result += StringFormat ( "%.2x" ,h5);
   result += StringFormat ( "%.2x" ,h6);
   result += StringFormat ( "%.2x" ,h7);

   return (result);
  }

Извините за беспокойство!

 
Есть реализация SHA256, SHA384, SHA512 в кодобазе, работает и в MQL5.
SHA256, SHA384 and SHA512 + HMAC
SHA256, SHA384 and SHA512 + HMAC
  • www.mql5.com
Many developers need these functions, while working with different kinds of external APIs, like Bitcoin and altcoin exchanges where it is often necessary to send data with the confirmation of parameters validity through HMAC-SHA512, HMAC-SHA384 and HMAC-SHA256.