Если текст_ключа превышает 64 символа, то HMacSha256 вычисляется некорректно. Что следует исправить в этом случае?
Моя текущая реализация адаптируется к ключам длиной более 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
- DevGlan
- www.devglan.com
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
Я только что попробовал это на своем терминале и получил то же самое, что и онлайн хэш-инструмент:
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); }
Извините за беспокойство!
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Реализация криптографического алгоритма SHA-256 с нуля на MQL5:
При реализации SHA-256 в торговую среду оптимизация эффективности приобретает решающее значение, поскольку каждая миллисекунда может повлиять на результаты торговли. Пользовательская реализация предлагает несколько способов оптимизации, которые были бы невозможны при использовании встроенных функций.
Торговые системы часто демонстрируют специфические паттерны в своих криптографических операциях. Например, сигнатуры ордеров обычно содержат аналогичные компоненты, такие как временные метки, символы и количества. Понимая эти паттерны, мы можем оптимизировать нашу реализацию SHA-256 специально для структур данных, связанных с трейдингом.
Рассмотрим, как работает размещение ордеров в типичном торговом сценарии. Для каждого ордера требуется несколько фрагментов информации: торговая пара, тип ордера, количество, цена и временная метка. В стандартных реализациях эти данные каждый раз обрабатывались бы как совершенно новые входные данные. Однако мы можем оптимизировать этот процесс, признавая, что многие компоненты остаются неизменными или следуют предсказуемым паттернам.
Автор: Abdulkudus Okatengwu Kadir