Se o key_text tiver mais de 64 caracteres, o HMacSha256 fará o cálculo incorretamente. O que deve ser corrigido nesse caso?
Minha implementação atual se adapta a chaves com mais de 64 caracteres. Você tem algum par específico de chave e mensagem para o qual isso não funcionou?
string text = "Hello";
string key_text = "1234567890123456789012345678901234567890123456789012345678901234";
https://www.devglan.com/online-tools/hmac-sha256-online -> 7558a77ff19ed6cb4777355e4bbc4772759a8130e1bb0913ba62b88411fdbaf8
Script de teste -> 2025.02.27 22:28:43.792 Sha256TestFile (EURUSD,M5) 6d8ee9dc1d16261fd986fafb97d919584aa206ca76706fb3deccc63ab2b7f6b
- DevGlan
- www.devglan.com
string text = "Hello";
string key_text = "1234567890123456789012345678901234567890123456789012345678901234";
https://www.devglan.com/online-tools/hmac-sha256-online -> 7558a77ff19ed6cb4777355e4bbc4772759a8130e1bb0913ba62b88411fdbaf8
Script de teste -> 2025.02.27 22:28:43.792 Sha256TestFile (EURUSD,M5) 6d8ee9dc1d16261fd986fafb97d919584aa206ca76706fb3deccc63ab2b7f6b
Acabei de experimentar em meu terminal e obtive o mesmo resultado que a ferramenta de hash on-line:
2025.02.28 12:37:16.468 hashin_example_code (EURUSD,M5) 7558A77FF19ED6CB4777355E4BBC4772759A8130E1BB0913BA62B88411FDBAF8
void Hash() { // O texto a ser processado em hash string text = "Hello"; string key_text = "1234567890123456789012345678901234567890123456789012345678901234"; HMacSha256 myhash(key_text, text); Print(myhash.hexval); }Talvez você queira compartilhar seu código.
Sim, ele funciona corretamente com o Sha256Algorithm.mqh original. Fiz algumas alterações, talvez seja por isso que não funcionou?
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); }
Desculpe-me por incomodá-lo!
- www.mql5.com
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Novo artigo Implementação do algoritmo criptográfico SHA-256 do zero em MQL5 foi publicado:
Ao implementar o SHA-256 em um ambiente de trading, a otimização da eficiência torna-se um fator decisivo, pois cada milissegundo pode afetar os resultados das negociações. A implementação personalizada oferece diversas maneiras de otimizar o desempenho que seriam impossíveis ao usar funções integradas.
Os sistemas de trading frequentemente apresentam padrões específicos em suas operações criptográficas. Por exemplo, as assinaturas de ordens normalmente contêm componentes semelhantes, como carimbos de tempo, símbolos e quantidades. Compreendendo esses padrões, podemos otimizar nossa implementação de SHA-256 de forma específica para estruturas de dados relacionadas ao trading.
Vejamos como ocorre o envio de ordens em um cenário típico de negociação. Para cada ordem, são necessários vários fragmentos de informação: o par de moedas, o tipo de ordem, a quantidade, o preço e o carimbo de tempo. Em implementações padrão, esses dados seriam processados como novas entradas a cada vez. No entanto, podemos otimizar esse processo reconhecendo que muitos componentes permanecem inalterados ou seguem padrões previsíveis.
Autor: Abdulkudus Okatengwu Kadir