CryptDecode com modificador CRYPT_ARCH_ZIP - Como usar? - página 4

 
sanyooooook:
Bem, ele faz, e então o compara com a saída do arquivador regular

Então, qual é o problema?

Se o ZIP criadopela CryptEncode() for decodificado, não está claro qual é o problema?

 

MQ tem seu próprio formato!

   string file_name = "GAZR-6.15.dat";
   uchar array[];
   uchar key[];
   uchar result[];
   int a_handle = FileOpen( file_name, FILE_READ|FILE_BIN );
   if ( a_handle != INVALID_HANDLE )
   {
     uint array_size = FileReadArray( a_handle, array );
     if ( array_size > 0 )
     {
       ArrayResize( key, array_size );
       for ( int i = 0; i < int( array_size ); i++ ) key[i] = 0;
       int a_enc = CryptEncode( CRYPT_ARCH_ZIP, array, key, result );
       int b_handle = FileOpen( "test.zip", FILE_WRITE|FILE_BIN );
       if ( b_handle != INVALID_HANDLE )
       {
         FileWriteArray( b_handle, result );
         FileClose( b_handle );
       }  
       FileClose( a_handle );
     }  
   }
   
   
   
   
   int handle = FileOpen( "test.zip", FILE_READ|FILE_BIN );
   if ( handle != INVALID_HANDLE )
   {
     uint array_size = FileReadArray( handle, array );
     FileClose( handle );
     
     Print( "Read totals: ", array_size );
     ArrayResize( key, array_size );
     for ( int i = 0; i < int( array_size ); i++ ) key[i] = 0;
     //ArrayResize( result, array_size, array_size * 100 );
     
     ResetLastError();
     int d = CryptDecode( CRYPT_ARCH_ZIP, array, key, result );
   
    if ( d < 1 )
     {
       Print( GetLastError() );
     } 
   }

Tudo funciona se você criar um arquivo da MQL5

Mas este arquivo não pode ser desembrulhado com o ZIP!! padrão!!

 
Mikalas:

MQ tem seu próprio formato!

Tudo funciona se você criar um arquivo da MQL5

Mas este arquivo não é desempacotado com o ZIP!! padrão!!

Michael, leia atentamente o post de Aleksander:

sanyooooooook:

O arquivo ZIP é toda uma estrutura, a função arquiva/desarquiva uma matriz, ou seja, você só deve colocar ali uma matriz que esteja pronta para ser desarquivada.

Grosso modo, ela desarquiva apenas a saída da função de arquivamento.


Ou seja, não existe um formato nativo da MQ. O que a função CryptEncode lhe dá é apenas uma parte do arquivo zip, o resto você mesmo tem que criar. Mas o problema é que nem mesmo partes de arquivos entre o arquivador de zip padrão e o CryptEncode correspondem.

De qualquer forma, aguardando a segunda-feira. Somente a MQ pode nos dar as informações que nos faltam.

 
C-4:

Mikhail, leia atentamente o post de Alexander:


Portanto, não há um formato proprietário da MQ. O que a função CryptEncode lhe dá é apenas uma parte do arquivo zip, o resto você mesmo tem que criar. Mas o problema é que nem mesmo partes de arquivos entre o arquivador de zip padrão e o CryptEncode correspondem.

De qualquer forma, estamos aguardando a segunda-feira. Somente a MQ pode nos dar as informações que nos faltam.

Então pule o cabeçalho e leia apenas os dados!

Google it = cabeçalho da biblioteca de compressão de dados PKWare

 
Mikalas:

Então, qual é o problema?

Se o ZIP criadopela CryptEncode() decodifica, não está claro qual é o problema?

A estrutura do que vem depois do CryptoDecode e do que vem depois do arquivador regular é diferente
 

aqui estão algumas experiências que eu fiz:

no arquivo: A raposa marrom rápida salta sobre o cão preguiçoso A raposa marrom rápida salta sobre o cão preguiçoso

em arquivo: A rápida raposa marrom salta sobre o cão preguiçoso

em arquivo: sdfgghghjdfggggfghjghghghjghjk,g

 
Acontece que a MQ tem sua própria estrutura de saída.
 

Vasiliy!

A MQL5 cria um ZIP sem cabeçalho!

Conseqüentemente, ele não o ignora ao ler.

Googling = cabeçalho da biblioteca de compressão de dados PKWare

http://en.wikipedia.org/wiki/Zip_(file_format)

A MQ tem apenas um método de compressão, portanto

se um ZIP estiver usando um método de compressão diferente, você não será capaz de descomprimi-lo.

Isto é, nem todos os arquivos ZIP estarão disponíveis para você!

 
sanyooooook:
A MQ tem sua própria estrutura de saída.

Não pode ser "seu", caso contrário não tem nada a ver com o ZIP.

As estruturas dos dados embalados serão diferentes dependendo da taxa de compressão, elas NÃO podem diferir. Consequentemente, o CryptDecode deve ser de alguma forma gerenciado por uma chave que descreve a taxa de compressão particular e outros parâmetros necessários. Somente a MQ sabe como configurar corretamente a chave.

Mikalas:

Vasiliy!

A MQL5 cria um ZIP sem cabeçalho!

Mikhail, você precisa entender do que está falando. O problema não é com o cabeçalho ou o formato do arquivo. Leia com cuidado este artigo.

 
C-4:

Não pode ser "seu", senão não tem nada a ver com o ZIP.

As estruturas dos dados embalados serão diferentes dependendo da taxa de compressão, elas NÃO podem diferir. Consequentemente, o CryptDecode deve ser de alguma forma gerenciado por uma chave que descreve a taxa de compressão específica e outros parâmetros. Somente a MQ sabe como configurar corretamente a chave.

Mikhail, você precisa entender qual é o problema. O problema não é com o cabeçalho ou o formato do arquivo. Leia a linha com atenção.

Então, diga corretamente o que você quer.

No início de seu tópico, você tem o código.

Você leu o arquivo na íntegra e está tentando decodificá-lo junto com o cabeçalho!

Qualquer arquivo ZIP, criado com um empacotador padrão, tem um CABEÇALHO!

O desembalador MQL5 NÃO pula o cabeçalho.

Portanto, não se pode desembalar dados.

Então, explique:

Inicialmente, o que você quer?