Diskussion zum Artikel "Implementierung des kryptografischen SHA-256-Algorithmus von Grund auf in MQL5"

 

Neuer Artikel Implementierung des kryptografischen SHA-256-Algorithmus von Grund auf in MQL5 :

Die Entwicklung DLL-freier Integrationen von Kryptowährungsbörsen war lange Zeit eine Herausforderung, aber diese Lösung bietet ein komplettes Framework für die direkte Marktanbindung.

Bei der Implementierung von SHA-256 in einer Handelsumgebung ist die Leistungsoptimierung von entscheidender Bedeutung, da jede Millisekunde das Handelsergebnis beeinflussen kann. Eine nutzerdefinierte Implementierung bietet mehrere Möglichkeiten zur Optimierung, die mit den integrierten Funktionen nicht möglich wären.

Handelssysteme weisen bei ihren kryptografischen Operationen häufig bestimmte Muster auf. So enthalten Auftragssignaturen in der Regel ähnliche Komponenten wie Zeitstempel, Symbole und Mengenangaben. Wenn wir diese Muster verstehen, können wir unsere SHA-256-Implementierung speziell für handelsbezogene Datenstrukturen optimieren.

Betrachten Sie, wie die Auftragserteilung in einem typischen Handelsszenario funktioniert. Für jeden Auftrag sind mehrere Informationen erforderlich: das Handelspaar, die Auftragsart, die Menge, der Preis und der Zeitstempel. Bei Standardimplementierungen würden diese Daten jedes Mal als völlig neue Eingabe verarbeitet werden. Wir können diesen Prozess jedoch optimieren, indem wir erkennen, dass viele Komponenten konstant bleiben oder vorhersehbaren Mustern folgen.


Autor: Abdulkudus Okatengwu Kadir

 

Wenn key_text mehr als 64 Zeichen hat, dann berechnet HMacSha256 falsch. Was sollte in diesem Fall korrigiert werden?

 
Sergey Zhilinskiy #:

Wenn key_text mehr als 64 Zeichen hat, dann berechnet HMacSha256 falsch. Was sollte in diesem Fall korrigiert werden?

Meine aktuelle Implementierung passt sich an Schlüssel mit mehr als 64 Zeichen Länge an. Haben Sie ein bestimmtes Schlüssel-/Nachrichtenpaar, bei dem es nicht funktioniert hat?

 
Abdulkudus Okatengwu Kadir #:

Meine derzeitige Implementierung passt sich an Schlüssel mit mehr als 64 Zeichen Länge an. Haben Sie ein bestimmtes Schlüssel-Meldungs-Paar, bei dem es nicht funktioniert hat?

string text = "Hallo";

string key_text = "1234567890123456789012345678901234567890123456789012345678901234";

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

Testskript -> 2025.02.27 22:28:43.792 Sha256TestFile (EURUSD,M5) 6d8ee9dc1d16261fd986fafb97d919584aa206ca76706fb3deccc63ab2b7f6b

if 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 = "Hallo";

string key_text = "1234567890123456789012345678901234567890123456789012345678901234";

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

Testskript -> 2025.02.27 22:28:43.792 Sha256TestFile (EURUSD,M5) 6d8ee9dc1d16261fd986fafb97d919584aa206ca76706fb3deccc63ab2b7f6b

if string key_text = "123456789012345678901234567890123456789012345678901234567890123" - OK

Ich habe es gerade auf meinem Terminal ausprobiert und das gleiche Ergebnis wie mit dem Online-Hash-Tool erhalten:

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

unter Verwendung des folgenden Codes:
void Hash()
{
   // Der zu hashende Text
   string text = "Hello";
   string key_text = "1234567890123456789012345678901234567890123456789012345678901234";
   HMacSha256 myhash(key_text, text);
   Print(myhash.hexval);
}
Vielleicht möchten Sie Ihren Code mit anderen teilen.

 

Ja, es funktioniert korrekt mit dem Original Sha256Algorithm.mqh. Ich habe einige Änderungen vorgenommen, vielleicht hat es deshalb nicht funktioniert?

 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);
  }

Tut mir leid, Sie zu stören!