記事「MQL5でSHA-256暗号化アルゴリズムをゼロから実装する」についてのディスカッション

 

新しい記事「MQL5でSHA-256暗号化アルゴリズムをゼロから実装する」はパブリッシュされました:

これまで、DLLを使用せずに暗号通貨取引所との統合を構築することは長らく課題とされてきました。しかし、本ソリューションは、市場へ直接接続するための包括的なフレームワークを提供します。

取引環境でSHA-256を実装する際、わずかなミリ秒の遅延が取引結果に影響するため、パフォーマンスの最適化は非常に重要です。カスタム実装により、組み込み関数では不可能な最適化が可能となります。

取引システムでは、暗号化処理に特有のパターンが見られます。たとえば、注文署名はタイムスタンプ、銘柄、数量など似たような要素を含みます。これらのパターンを活用することで、取引関連データ構造に特化したSHA-256の最適化が可能です。

典型的な取引シナリオにおける注文処理について考えてみましょう。各注文には取引ペア、注文タイプ、数量、価格、タイムスタンプなど複数の情報が必要です。一般的な実装では、これらのデータは毎回まったく新しい入力として処理されます。しかし、多くの要素が一定であったり、予測可能なパターンに沿って変化することに着目すれば、この処理を効率化することが可能です。


作者: Abdulkudus Okatengwu Kadir

 

key_textが64文字以上の場合、HMacSha256の計算が正しくない。この場合、何を修正すべきでしょうか?

 
Sergey Zhilinskiy #:

key_textが64文字以上の場合、HMacSha256の計算が不正確になります。この場合、何を修正すべきでしょうか?

私の現在の実装では、64文字以上の長さの鍵に対応しています。うまくいかないキーとメッセージのペアはありますか?

 
Abdulkudus Okatengwu Kadir #:

私の現在の実装では、64文字以上の長さのキーに対応しています。うまくいかなかったキーとメッセージのペアはありますか?

string text = "Hello";

string key_text = "12345678901234567890123456789012345678901234";

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

テストスクリプト -> 2025.02.27 22:28:43.792 Sha256TestFile (EURUSD,M5) 6d8ee9dc1d16261fd986fafb97d919584aa206ca76706fb3deccc63ab2b7f6b

ifstring key_text = "12345678901234567890123456789012345678901234567890123" - 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 = "Hello";

string key_text = "12345678901234567890123456789012345678901234";

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

テストスクリプト -> 2025.02.27 22:28:43.792 Sha256TestFile (EURUSD,M5) 6d8ee9dc1d16261fd986fafb97d919584aa206ca76706fb3deccc63ab2b7f6b

ifstring key_text = "12345678901234567890123456789012345678901234567890123" - 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);
  }

お手数かけてすみません!

 
kodobaseには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.